5/03/2022

Excel。VBA。読み込んだデータをテーブルにして計算列を手早くつくりたい【Table】

Excel。VBA。読み込んだデータをテーブルにして計算列を手早くつくりたい

<Excel VBA>

読み込んだテキストデータやCSVデータを、その後Excelでテーブルとして使用したいので、テーブルにして、なおかつ、演算フィールド(計算列)も追加するには、どのようにしたらいいのでしょうか?


次データは、外部データを読み込んだ状態です。


目的は、テーブルにすること。

そして、E列に、合計という「単価×販売数」のデータを算出した列を追加すること。


この2点を手早く行いたいので、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 = "=[単価]*[販売数]"

End Sub


では、実行してみましょう。


テーブルになって、合計という計算列も追加することができました。


プログラム文を確認しておきましょう。


ActiveSheet.ListObjects.Add xlSrcRange, Range("a1").CurrentRegion

ListObjectsコレクションのAddメソッドをつかうことで、テーブルに変換することができます。

今回は、Range("a1").CurrentRegion。

A1から連続するデータの範囲が、テーブルにする範囲として設定しました。


ActiveSheet.ListObjects(1).Name = "テーブル化"

テーブルにテーブル名を設定しています。

テーブル名は、テーブルデザインタブで確認することができます。


テーブル名を設定しておくことで、このあとに実行する計算列をつくるのが楽になります。


次からが、計算列を追加する作業です。

With ActiveSheet.ListObjects(1).ListColumns

    .Add

   .Item(.Count).Name = "合計"

End With


With文を使っています。

「ActiveSheet.ListObjects(1).ListColumns」を繰り返すのが面倒だからです。


ListColumnsコレクションのAddメソッドをつかうことで、テーブルに列を追加することができます。


「.Item(.Count).Name = "合計"」

この行は、追加した列に、列見出しを追加する作業をしています。


Range("テーブル化[合計]").Value = "=[単価]*[販売数]"

この行で、単価×販売数を算出させていますが、テーブルなので、構造化参照の計算式を設定しないといけないので、フィールド名に「[]」がついています。


追加した列の数式を確認すると、構造化参照になっていることがわかります。


このように、テーブルに設定するには、「ListObjectsコレクションのAddメソッド」が必要になりますので、テーブルを常に使う人は、覚えておくといいかもしれませんね。