コラム

経理マンはプログラミングの何を学習すべきか

CFOオフィス事業部 プロダクト開発課 田島 育海

突然ですが、プログラミングが上手いとはどんなことでしょうか。

難しい機能を実装できること
組むスピードが速いこと
綺麗なコードが書けること

これらは全て総称して技術とされますが、それぞれに軸の異なるスキルであることは明らかです。

私たちのような経理業務に携わる人間にとっても、プログラミングは学習する意義が大きいということは既知の通りです。しかし、前述した3つの軸のうちどの部分を伸ばせば良いかという議論はあまり目にする機会がありません。

結論から申し上げますと、経理マンにとって最も必要なスキルは綺麗なコードを書く技術です。もう少し正確に言えば他人にその意図が伝わるコードを書く技術でしょうか。
おなじみExcel VBAを例にご説明します。

実のところVBAを書くのは非常に簡単で、1日もあればExcelの基本的な操作は全てコードから実行できるようになるでしょう。しかし、問題はその先にあります。
下の例を見てください。

Sub Example1()
    Range(“B3”).Interior.Color = RGB(255, 0, 0)
End Sub

Sub Example2()
    ActiveSheet.Range(“B3”).Interior.ColorIndex = 3
End Sub

Sub Example3()
    Cells(3, 2).Interior.Color = rgbRed
End Sub

これら3つのプログラムは全く同じB3セルの背景色を赤くするという動作をします。
また、マクロの記録という機能を使用した場合は以下のようになります。

Sub Macro1()

‘ Macro1 Macro


    Range(“B3”).Select
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 255
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
End Sub

このように、プログラムとは同じ動作をするものであってもその書き手によって微妙に記述が変わるものです(中でもVBAはその差異が大きく出る言語です)。同じようにVBAの知識がある方であったとしても、自分の書いたコードをそのまま他人が理解できるとは限りません。

書いて動かして終わり、であればこれはさほど問題にならないのですが、実際には作ったプログラムには必ずメンテナンスの手間が発生します。そしてあなたが他人に伝わるコードを書いていなければ、その手間は必ずあなたの元へやってきます。
他人に伝わらないコードは、機械化したのに属人化してしまったという悲劇を生むのです。

こと事務仕事のVBAにおいてはなんとなく書ける人が書き、なんとなくそのまま運用が始まるというケースが少なくありませんが、その恐ろしさがご理解いただけたでしょうか。

前置きが長くなりましたが、他人に伝わるコードを書くために学習すべき項目をいくつかご紹介します。

適切なネーミング
プログラミングをする上で避けて通れないのが命名です。
モジュール名、プロシージャ名、変数名、など…
プログラムの部品にはほとんどの場合自分で名前をつける必要があり、そのつけ方によってプログラムの可読性は大きく変わります。
極端な例ではありますが、

Sub Main()

    Dim a, b, c, d

    With ActiveSheet.UsedRange
        a = .Row
        b = .Column
        c = .Rows.Count + a 1
        d = .Columns.Count + b 1
    End With

    Cells(a, d).Interior.Color = rgbRed
    Cells(c, b).Interior.Color = rgbBlue

End Sub

Sub SetColorToCorners()

    Dim firstRow, firstCol
    Dim lastRow, lastCol

    With ActiveSheet.UsedRange
        firstRow = .Row
        firstCol = .Column
        lastRow = .Rows.Count + firstRow 1
        lastCol = .Columns.Count + firstCol 1
    End With

    Cells(firstRow, lastCol).Interior.Color = rgbRed
    Cells(lastRow, firstCol).Interior.Color = rgbBlue

End Sub

上と下との違いはプロシージャ名および変数名のみですが、これだけでも大分伝わると思います。

とは言え、何にどういった名前をつけるのが最適かというのは難しい問題です。
・大文字/小文字
・キャメルケース/スネークケース
・動詞/名詞
などの軸で最適な命名規則を見つけてください。

コメント

Sub CreateRandomNumberTable()

    ‘乱数表のサイズを変更したい場合は以下の数値を変更してください
    Const ROW As Long = 100
    Const COL As Long = 100

    ‘ワークシート上の選択範囲が複数セルに跨っていたら処理を中断
    If Selection.Address <> Selection(Selection.Count).Address Then End

    ‘2次元の乱数表を作成
    Dim table() As Long
    ReDim table(1 To ROW, 1 To COL)
    Dim i As Long, j As Long
    For i = 1 To ROW
        For j = 1 To COL
            table(i, j) = Round(Rnd() * 100) ‘1~100の乱数
        Next
    Next

    ‘●●からの依頼により乱数表を貼りつける起点は選択中のセル
    Selection.Resize(ROW, COL) = table

End Sub

ほとんどのメジャーな言語では、コードの中にコメントを挿入することが出来ます。
・頻繁に更新が必要と思われる部分
・遠回しな手法を使っているため注釈が必要な部分
・ブロックの説明
・なぜその処理が必要なのか
など、伝えたいことを積極的に書き込んでください。

学習を進めていく過程で書くべきでないコメントについても知ることになりますが、VBAなどの短いスクリプトレベルではあまり気にする必要はありません。

 

上記2点はどの言語においても共通して使うことの出来るスキルです。VBAについては更に
・変数宣言の強制
・宣言時のデータ型
・関数化
・組み込み定数
などを理解されるとより伝わるコードが書けるようになるでしょう。

長くなりましたが、このコラムがこれからプログラミングを始めてみたい方、マクロ等の引継ぎにお困りの方の一助になれば幸いです。

ページの先頭へ