Excelで作成した表は、「テーブル」に変換できます。それにより、並べ替えやオートフィルター、合計値などの集計、データの追加、スタイル選択による書式設定を簡単に行えます。
経費精算書フォーマットは、既にテーブルに変換されているので、経費収集.xlsmの経費収集シートを例としてテーブルに変換します。
まず、テーブル化したいセル範囲のいずれかにカーソルを置いた状態で、リボンの「挿入」から「テーブル」を選択します。
「テーブルの作成」ダイアログが開きます。テーブル化する対象範囲はExcelが自動で判別して指定するので、そのまま「OK」をクリックします。
すると、以下のように対象範囲がテーブル化されます。
テーブル化はVBAに限らず、通常のExcel作業でもメリットがありますので、活用してみてください。
さて、これから新たにデータを追加しますので、2行目以降のデータは一回削除します。これでExcel側の準備は完了しました。次はマクロを修正します。
経費データ収集マクロを、テーブルを活用したものに修正しました。
Enum e
日付 = 1
科目
訪問先名
支払先名
内容
金額
備考
End Enum
Sub 経費データ収集()
Dim fso As FileSystemObject
Set fso = New FileSystemObject
Dim pass As String
pass = ThisWorkbook.Path & "\経費精算書"
Dim month As Date, department As String, fullname As String '対象月,部署,氏名
Dim rowsSheet1 As ListRows
Set rowsSheet1 = Sheet1.ListObjects(1).ListRows
Dim f As file
For Each f In fso.GetFolder(pass).Files
With Workbooks.Open(f)
With .Worksheets(1)
month = .Range("G1").Value '対象月
department = .Range("G3").Value '部署
fullname = .Range("G4").Value '氏名
With .ListObjects(1)
Dim row As ListRow
For Each row In .ListRows
Dim rowSheet1 As ListRow
Set rowSheet1 = rowsSheet1.Add
Dim rng As Range
Set rng = row.Range
rowSheet1.Range = Array( _
month, _
rng(e.日付), _
department, _
fullname, _
rng(e.科目), _
rng(e.内容), _
rng(e.金額), _
rng(e.備考) _
)
Next row
End With
End With
.Close
End With
Next f
Set fso = Nothing
End Sub
中級レベルの「Excel VBA開発者」になるために必要な考え方
タイプミスをゼロにするのは不可能? VBAコーディングを速めるツールとは
税率変更にも簡単に対応、無駄を減らすコーディングのコツとはCopyright © ITmedia, Inc. All Rights Reserved.