Excelのテーブル(ListObject)を使うとき、行だけでなく 列の追加・削除 を自動化したい場面もあります。
例えば「新しい項目を追加する」「不要な列を削除する」などの処理です。
VBAでは ListColumns.Add と ListColumns.Delete を使うことで、簡単に列を操作できます。
目次
1. ListColumns.Add で列を追加する
テーブルの列は ListColumns プロパティで管理されています。
その中に新しい列を追加するには Add メソッドを使います。
基本構文
ListObject.ListColumns.Add(Position)
- Position(省略可)
追加する位置を指定します。- 省略時 → 最後に追加
- 数値指定 → 指定した列番号の前に追加される
サンプルコード(最後に列を追加)
Sub テーブル列追加_最後()
Dim ws As Worksheet
Dim lo As ListObject
Dim newCol As ListColumn
Set ws = ThisWorkbook.Sheets("Sheet1")
Set lo = ws.ListObjects("Table1")
'最後に新しい列を追加
Set newCol = lo.ListColumns.Add
'列名を設定
newCol.Name = "備考"
End Sub
このコードを実行すると、テーブルの末尾に「備考」という新しい列が追加されます。
サンプルコード(2列目に挿入)
Sub テーブル列追加_途中()
Dim ws As Worksheet
Dim lo As ListObject
Dim newCol As ListColumn
Set ws = ThisWorkbook.Sheets("Sheet1")
Set lo = ws.ListObjects("Table1")
'2列目に新しい列を挿入
Set newCol = lo.ListColumns.Add(2)
'列名を設定
newCol.Name = "カテゴリ"
End Sub
この場合、2列目に「カテゴリ」列が追加され、以降の列は1つ右にシフトされます。
2. ListColumns.Delete で列を削除する
列の削除は ListColumns(列番号 or 列名).Delete で実行できます。
サンプルコード(2列目を削除)
Sub テーブル列削除_番号指定()
Dim ws As Worksheet
Dim lo As ListObject
Set ws = ThisWorkbook.Sheets("Sheet1")
Set lo = ws.ListObjects("Table1")
'2列目を削除
lo.ListColumns(2).Delete
End Sub
サンプルコード(列名で指定して削除)
Sub テーブル列削除_名前指定()
Dim ws As Worksheet
Dim lo As ListObject
Set ws = ThisWorkbook.Sheets("Sheet1")
Set lo = ws.ListObjects("Table1")
'「カテゴリ」という名前の列を削除
lo.ListColumns("カテゴリ").Delete
End Sub
列名で指定する方法は、列の位置が変わっても確実に削除できるので実務でおすすめです。
3. 実行前後のイメージ
実行前(Table1)
商品名 | 数量 | 日付 |
---|---|---|
商品X | 10 | 2025/10/01 |
商品Y | 20 | 2025/10/02 |
列追加(備考を追加)
商品名 | 数量 | 日付 | 備考 |
---|---|---|---|
商品X | 10 | 2025/10/01 | |
商品Y | 20 | 2025/10/02 |
列削除(数量を削除)
商品名 | 日付 | 備考 |
---|---|---|
商品X | 2025/10/01 | |
商品Y | 2025/10/02 |
4. 注意点
- 列を削除すると、その列のデータは完全に失われるので注意
- 列名で指定するほうが安全(列位置が変わっても対応可能)
- 数式列や書式も削除対象になるため、必要に応じてバックアップを推奨
5. まとめ
- ListColumns.Add → テーブルに新しい列を追加できる(末尾/任意の位置)
- ListColumns.Delete → 列番号または列名で削除可能
- 列名指定で削除する方法が実務では安全でおすすめ
コメント