Excelマクロを使うべきとき:データ+フォーマット(交通費精算書の作成例)


勤め人の方は、毎月の交通費の精算書を会社に出していると思います。精算書は、Excelのフォーマットですか? でしたら、データもあれば、毎月の作業を効率化できます。

SUICA(交通系IC)をカードリーダーに読み込ませてCSVファイルを取得すれば、データが手に入ります。

Excelマクロ(VBA)は、いつ使うのか? それは、手もとにフォーマットとデータの2つが揃ったときです。

データは下ごしらえが必要

SUICAのCSVデータは新しい順に並んでいますが、交通費精算のフォーマットは古い順に書くと思います。そこで、あらかじめデータの方に行番号を振って降順(古い順)に並べ替えておきます。

あと、データに列を追加してそこに訪問先を入力し、フィルタで全選択→空欄除外で精算対象だけを抽出して、フォーマットの隣のシートにデータを貼り付けます。

これで、データとフォーマットが揃いました。あとはコードを書いて、データからフォーマットに転記するだけです。

作例

左のフォーマットの適切な列に、右のシートにあるデータの必要な列のデータを転記していく、ごく初歩的なマクロです。左のRangeのセル指定は、お手もとのフォーマットに応じて適時変えてくださいね。

Option Explicit

Sub koutuhi() '交通費精算書のフォーマットにSUICAのデータ(古い順に並べ替え後)を転記する
    Dim i
    'シートデータの最大行を数える
    For i = 2 To Worksheets("data").Range("a" & Rows.Count).End(xlUp).Row
        Worksheets("fmt").Range("a" & i + 2).Value = Worksheets("data").Range("b" & i).Value
        Worksheets("fmt").Range("b" & i + 2).Value = Worksheets("data").Range("m" & i).Value
        Worksheets("fmt").Range("d" & i + 2).Value = Worksheets("data").Range("g" & i).Value
        Worksheets("fmt").Range("e" & i + 2).Value = Worksheets("data").Range("e" & i).Value
        Worksheets("fmt").Range("g" & i + 2).Value = Worksheets("data").Range("h" & i).Value
        Worksheets("fmt").Range("h" & i + 2).Value = Worksheets("data").Range("i" & i).Value
    Next
End Sub