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メソッド」が必要になりますので、テーブルを常に使う人は、覚えておくといいかもしれませんね。