Excel。VBA。表をテーブルにして合計列も手早く追加したい
<Excel VBA>
CSVやテキストファイルなどのデータを読み込むと、Power Queryに読み込まれることで、自動的にテーブル化されます。
しかし、普通に作成した表をテーブルにして、ついでに演算フィールドというか、単価×販売数の合計列も追加したい場合、単純作業ですが、面倒な作業といえます。
そこで、今回は、Excel VBAでプログラムを作ってみようと思います。
Sub テーブル挿入と合計行()
ActiveSheet.ListObjects.Add xlSrcRange, Range("a1").CurrentRegion
ActiveSheet.ListObjects(1).Name = "文房具売上表"
With ActiveSheet.ListObjects(1).ListColumns
.Add
.Item(.Count).Name = "合計"
End With
Range("文房具売上表[合計]").Value = "=[単価]*[販売数]"
Range("a1:e1").HorizontalAlignment = xlCenter
End Sub
では、実行して確認してみます。
テーブルになり、E列に合計列も追加されています。
さらに、見出しも中央揃えにするようにしてあります。
では、プログラム文を確認しておきましょう。
ActiveSheet.ListObjects.Add xlSrcRange, Range("a1").CurrentRegion
A1から連続するデータ範囲「Range("a1").CurrentRegion」を、テーブルにする範囲として設定しています。
「ListObjects.Add xlSrcRange」
ListObjects.Add で、テーブルに変換することができます。
テーブルに設定(挿入)するには、「ListObjectsコレクションのAddメソッド」で行います。
ActiveSheet.ListObjects(1).Name = "文房具売上表"
テーブルに、「文房具売上表」というテーブル名を設定しています。
With ActiveSheet.ListObjects(1).ListColumns
.Add
.Item(.Count).Name = "合計"
End With
With文をつかって、「ActiveSheet.ListObjects(1).ListColumns」を繰り返し入力しないようにしています。
「ListColumns.Add」で、テーブルに列を追加しています。
「ListColumns.Item(.Count).Name = "合計"」で、列見出しを入力しています。
Range("文房具売上表[合計]").Value = "=[単価]*[販売数]"
単価*販売数は、構造化参照にする必要がありますので、「[]」をフィールド名につけています。
それにより、「=[@単価]*[@販売数]」という構造化参照の数式を設定することができました。
Range("a1:e1").HorizontalAlignment = xlCenter
中央揃えに設定しています。