Excel VBAでテーブル(ListObject)を操作しようとした際に、
「実行時エラーが発生する」「参照しようとしたテーブルが見つからない」
といったトラブルに遭遇することがあります。
特に多いのが、ListObject(テーブル)が取得できないケースです。この記事では、その原因と解決策をチェックリスト形式で整理しました。
目次
1. テーブル名が正しく設定されているか
VBAでテーブルを取得するときは、**テーブル名(ListObject.Name)**を使います。
しかし、以下のようなケースでエラーが発生することがあります。
- 名前を間違えて指定している
- Excelが自動的に「Table1」「Table2」とリネームしている
- 日本語名と英語名を混同している
チェック方法
- Excelで対象のシートを開く
- 「テーブルデザイン」タブ → プロパティ → テーブル名を確認
- VBAで参照している名前と一致しているか確認
'テーブル名を直接指定して取得
Dim tbl As ListObject
Set tbl = ThisWorkbook.Sheets("Sheet1").ListObjects("SalesTable")
ポイント:VBAコードでのテーブル名は、必ず「テーブルデザイン」で確認した正確な名前を使う。
2. 参照しているシートが正しいか
テーブルはシートごとに管理されています。
そのため、シート名を間違えるとテーブルを取得できません。
よくある例
'Sheet1にあると思ったが、実際はSheet2にあった
Set tbl = ThisWorkbook.Sheets("Sheet1").ListObjects("SalesTable")
解決策
- 該当のテーブルがどのシートにあるかを確認する
- シート名をハードコーディングせず、シートを変数化する
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet2") '正しいシートを指定
Set tbl = ws.ListObjects("SalesTable")
3. テーブルが存在しない場合のエラー処理
「テーブルが削除されていた」「まだ作成されていない」場合も、取得しようとするとエラーになります。
その場合は、存在確認をしてから処理するのが安全です。
存在確認の方法
Function TableExists(ws As Worksheet, tblName As String) As Boolean
Dim tbl As ListObject
On Error Resume Next
Set tbl = ws.ListObjects(tblName)
TableExists = Not tbl Is Nothing
On Error GoTo 0
End Function
'使用例
Sub CheckTable()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
If TableExists(ws, "SalesTable") Then
MsgBox "テーブルは存在します"
Else
MsgBox "テーブルが見つかりません"
End If
End Sub
4. テーブルが範囲外にあるケース
コピー&ペーストやシート操作の結果、テーブルが意図せず別の場所に移動していることがあります。
特に「シートコピー」や「ブック間コピー」を行った場合、テーブル名の競合でExcelが自動的に名前を変えているケースが多いです。
チェック方法
- シートを開いて「Ctrl + T」でテーブルを再確認
- 名前が変わっていないか確認
5. ブックの参照が間違っている
VBAでテーブルを扱うとき、対象のブックを正しく指定していないと取得に失敗します。
よくあるミス
ThisWorkbook(コードがあるブック)を参照しているが、実際は別のブックにテーブルがあるActiveWorkbook(アクティブなブック)を使ってしまい、意図と違うブックを参照している
解決策
ThisWorkbookとActiveWorkbookの違いを理解して正しく指定する- 明示的にブック名を使う
Dim wb As Workbook
Set wb = Workbooks("DataFile.xlsx")
Set tbl = wb.Sheets("Sheet1").ListObjects("SalesTable")
6. まとめ
ListObject(テーブル)が取得できないときは、以下のチェックリストを順に確認するのが効果的です。
- テーブル名が正しいか(自動リネームされていないか)
- 正しいシートを参照しているか
- テーブルが存在するかどうか(存在確認処理を入れる)
- テーブルが移動・コピーで別名になっていないか
- ブックの参照が間違っていないか
これらを押さえておくことで、VBAでのテーブル操作が安定し、エラーを防ぐことができます。
コメント