テーブルに新しい列(データ)を追加する
テーブル形式のリストにデータを追加する方法を紹介します!
テーブル
テーブルってこんなやつです。
ワークシート上にある表の中に、アクティブセルを置き、「挿入タブ>テーブル」で作れますね。
この”テーブル”ですが、VBAで言うとテーブルにした時点で、”ListObject(リストオブジェクト)”というオブジェクトが作られます。
テーブルに新しい列を追加する
ListObject(リストオブジェクト)の列データは、ListColumnオブジェクトになりますが、そのListColumnオブジェクト全体を管理するListColumnsコレクションのAddメソッドを使うことで、テーブルの列を追加することが出来ます(^o^)
データ処理なんかしてると、他の列項目から新しい列データを追加したいときなどがよくありますが、そんなときに便利です。
では、実際に挙動を確認してみましょう!
次のコードをご覧ください。
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プロパティを設定します。
列を追加するところから一連でやってみましょう。
コードは次のようになります。
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に入力したいデータを設定します。
では、これも列を追加するところからの一連の流れで確認しましょう。
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での処理も簡単に出来ることがたくさんあります!
コメント