【EXCEL VBA | ListColumns.Add】テーブルに新しい列(データ)を追加する

スポンサーリンク

テーブルに新しい列(データ)を追加する

テーブル形式のリストにデータを追加する方法を紹介します!

テーブル

テーブルってこんなやつです。

ワークシート上にある表の中に、アクティブセルを置き、「挿入タブ>テーブル」で作れますね。

この”テーブル”ですが、VBAで言うとテーブルにした時点で、”ListObject(リストオブジェクト)”というオブジェクトが作られます。

テーブルに新しい列を追加する

ListObject(リストオブジェクト)の列データは、ListColumnオブジェクトになりますが、そのListColumnオブジェクト全体を管理するListColumnsコレクションのAddメソッドを使うことで、テーブルの列を追加することが出来ます(^o^)

データ処理なんかしてると、他の列項目から新しい列データを追加したいときなどがよくありますが、そんなときに便利です。

構文

ListObject.ListColumns.Add

では、実際に挙動を確認してみましょう!

次のコードをご覧ください。

Sub sample()

    'テーブルを変数に格納する
    Dim テーブル As ListObject
    Set テーブル = ActiveSheet.ListObjects(1)
    
    '捕まえたテーブルのListColumnsコレクションに対してAddメソッドを実行
    '追加した空列を変数に格納する
    Dim 追加した列 As ListColumn
    Set 追加した列 = テーブル.ListColumns.Add
    
End Sub

まずは、シート上のテーブルを変数に格納しています。

そして、その捕まえたテーブル(ListObject)のListColumnsコレクションに対して、Addメソッドを実行する。

簡単ですね(^o^)

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

テーブルに空の列が追加されているのが分かりますね(^o^)

実行結果はこちらです。

I列にテーブルの列が1つ増えています。

追加した列に列名を付ける

追加した列を見ると、列名が「列1」となっています。

このままでは使い難いので、列名を付けましょう。

テーブルの列名を変更するには、ListColumnオブジェクトのNameプロパティを設定します。

構文

ListObject.ListColumn.Name = "付けたい列名"

列を追加するところから一連でやってみましょう。

コードは次のようになります。

Sub sample()

    'テーブルを変数に格納する
    Dim テーブル As ListObject
    Set テーブル = ActiveSheet.ListObjects(1)
    
    '捕まえたテーブルのListColumnsコレクションに対してAddメソッドを実行
    '追加した空列を変数に格納する
    Dim 追加した列 As ListColumn
    Set 追加した列 = テーブル.ListColumns.Add
    
    '列名を付ける
    追加した列.Name = "年代"
    
End Sub

「’列名を付ける」の下、

追加した列.Name = "年代"

の部分で列名を変更しています。

追加した列の列名が”年代”に変更出来ました。

ちなみに、既にある列名を指定してしまうと、「列1」など自動で設定される名前になってしまうので注意してください。

追加した列にデータを入れる

では、最後に新しく作った列にデータを追加しましょう。

テーブルのセルにデータを追加する方法は色々ありますが、ここでは別の列のデータを元に数式を使って一気にデータを入力する方法を紹介します。

追加するデータは、

年齢列を元に、”10代”、”20代”、”30代”、”40代”、”50代”、”60代”、”それ以上”という年代に分けてデータを入力したいと思います。

まず、テーブルの列に、同じデータを一気に入力するには、ListColumnオブジェクトのDataBodyRangeに入力したいデータを設定します。

構文

ListColumnオブジェクト.DataBodyRange = "入力したいデータ"

では、これも列を追加するところからの一連の流れで確認しましょう。

Sub sample()

    'テーブルを変数に格納する
    Dim テーブル As ListObject
    Set テーブル = ActiveSheet.ListObjects(1)
    
    '捕まえたテーブルのListColumnsコレクションに対してAddメソッドを実行
    '追加した空列を変数に格納する
    Dim 追加した列 As ListColumn
    Set 追加した列 = テーブル.ListColumns.Add
    
    '列名を付ける
    追加した列.Name = "年代"
    
    '列のセルにデータを入力する
    追加した列.DataBodyRange = "データ"
    
End Sub

「’列のセルにデータを入力する」の下

追加した列.DataBodyRange = "データ"

の部分です。

ここでは、セルに「データ」という文字列を入力します。

実行しましょう。

新しく追加した”年代列”にデータという文字列が追加されました。

では、年齢から年代を算出する数式を入力したいと思います。

テーブルでは、次の記事でも紹介した”構造化参照”という参照の方法が使えます。

構造化参照を使うことで、行が違っても同じ数式で計算をすることが出来ます。

年齢から年代を算出する数式を構造化参照を使って作って、それを一気に列のセルに代入することにしましょう。

まずは、構造化参照を使って作った、年齢から年代を算出する数式です。

=IF([@年齢]<20,"10代",
 IF([@年齢]<30,"20代",
 IF([@年齢]<40,"30代",
 IF([@年齢]<50,"40代",
 IF([@年齢]<60,"50代",
 IF([@年齢]<70,"60代",
 "それ以上"))))))

この数式を、年代列のセルに入力します。

ではやってみましょう!

Sub sample()

    'テーブルを変数に格納する
    Dim テーブル As ListObject
    Set テーブル = ActiveSheet.ListObjects(1)
    
    '捕まえたテーブルのListColumnsコレクションに対してAddメソッドを実行
    '追加した空列を変数に格納する
    Dim 追加した列 As ListColumn
    Set 追加した列 = テーブル.ListColumns.Add
    
    '列名を付ける
    追加した列.Name = "年代"
    
    '列のセルにデータを入力する(数式)
    追加した列.DataBodyRange = "=IF([@年齢]<40,""30代"", IF([@年齢]<50,""40代"", IF([@年齢]<60,""50代"", IF([@年齢]<70,""60代"", ""それ以上""))))"
    
End Sub

「'列のセルにデータを入力する(数式)」の下の部分です。

先程、”データ”としていたものを数式に変更しています。

追加した列.DataBodyRange = "=IF([@年齢]<40,""30代"", IF([@年齢]<50,""40代"", IF([@年齢]<60,""50代"", IF([@年齢]<70,""60代"", ""それ以上""))))"

VBAから、ワークシートのセルに数式を入力する時にダブルクォーテーション(”)を使う場合は、ダブルクォーテーションを2つ繋げて入力する必要があるので注意してください。

では、やってみましょう!

年代列に数式を入力して、年代を入力することが出来ました!

今回は以上です!(^o^)

テーブルを上手く使うことで、VBAでの処理も簡単に出来ることがたくさんあります!

スポンサーリンク
スポンサーリンク

シェアする

フォローする

スポンサーリンク