9/22/2024

Excel。VBA。表をテーブルにして合計列も手早く追加したい【TABLE】

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

中央揃えに設定しています。