Excel VBAを使って、指定した条件に一致するセルをテーブルから検索し、その値を利用する方法を紹介します。この手順により、大量のデータを含むテーブルから、特定の条件を満たすデータを効率的に抽出できるようになります。
1. 準備するもの
- テーブル: 検索対象のデータをテーブル形式で用意します。ここでは、Excelのテーブル(ListObject)としてデータを構成します。
- 検索条件: 検索条件はセルや範囲に指定された値を使用します。
2. VBAでの基本的なテーブル検索方法
以下のコードでは、特定の行と列を検索し、その値を取得する方法を解説します。
基本コード
以下は、Excelシート内のテーブルで指定した行と列から値を取得するサンプルコードです。
Sub SearchTableValue()
Dim tableName As String
Dim rowNum As Variant
Dim colNum As Variant
Dim resultValue As Variant
Dim tableRange As ListObject
Dim rowDataRange As Range
Dim headerRange As Range
' テーブル名の設定("MyTable" などに変更してください)
tableName = "MyTable"
Set tableRange = ThisWorkbook.Sheets("Sheet1").ListObjects(tableName)
' 検索したい行と列の値をシートから取得
Dim searchRowValue As Variant
Dim searchColValue As Variant
searchRowValue = Sheets("Sheet1").Range("M3").Value ' 行方向の検索値
searchColValue = Sheets("Sheet1").Range("N3").Value ' 列方向の検索値
' テーブルの1列目を行方向検索の対象とする
Set rowDataRange = tableRange.ListColumns(1).DataBodyRange
' テーブルのデータ部分の3行目を列方向検索の対象とする
Set headerRange = tableRange.HeaderRowRange.Offset(2) ' ヘッダーの2行下を対象に設定
' M3の値を1列目で検索し、一致する行番号を取得
On Error Resume Next
rowNum = Application.WorksheetFunction.Match(searchRowValue, rowDataRange, 0)
On Error GoTo 0
If IsError(rowNum) Then
MsgBox "行が見つかりません。"
Exit Sub
End If
' N3の値をデータ部分の3行目で検索し、一致する列番号を取得
On Error Resume Next
colNum = Application.WorksheetFunction.Match(searchColValue, headerRange, 0)
On Error GoTo 0
If IsError(colNum) Then
MsgBox "列が見つかりません。"
Exit Sub
End If
' 行と列の位置から値を取得
resultValue = tableRange.DataBodyRange.Cells(rowNum, colNum).Value
MsgBox "検索結果: " & resultValue
End Sub
コードの解説
- テーブルを設定する
Set tableRange = ThisWorkbook.Sheets("Sheet1").ListObjects(tableName)
検索対象となるテーブルを特定します。このコードではtableNameという変数にテーブル名を指定しています。 - 行方向の検索
rowNum = Application.WorksheetFunction.Match(searchRowValue, rowDataRange, 0)
行方向の検索にはMatch関数を使います。テーブルの1列目(rowDataRange)から、セルM3に設定された値searchRowValueに一致する行番号を取得します。 - 列方向の検索
colNum = Application.WorksheetFunction.Match(searchColValue, headerRange, 0)
列方向の検索も同様にMatch関数を使用します。テーブルのデータ部分の3行目(headerRange)から、セルN3に設定された値searchColValueに一致する列番号を取得します。 - 検索結果の表示
resultValue = tableRange.DataBodyRange.Cells(rowNum, colNum).Value
検索した行と列の位置から値を取得し、MsgBoxを使って結果を表示します。
3. 応用: 値を他のセルに表示する
取得した値を MsgBox ではなく、シート上の任意のセルに表示することも可能です。以下のコードでは、検索結果を V3 セルに表示します。
Sheets("Sheet1").Range("V3").Value = resultValue
まとめ
このコードを使えば、Excel VBAで特定の条件に一致するテーブルの値を簡単に検索し、利用することができます。大量のデータや複数条件での検索が必要な場合、この方法は非常に便利です。テーブル内でのデータ処理を効率化したいときに、ぜひお試しください。
技術書の購入コストを抑えてスキルアップするなら

ここまで読んでいただきありがとうございます。最後に宣伝をさせてください。
プログラミングの技術書や参考書は、1冊3,000円〜5,000円するものも多く、出費がかさみがちです。Kindle Unlimitedであれば、月額980円で500万冊以上の書籍が読み放題となります。
気になる言語の入門書から、アルゴリズム、基本設計の専門書まで、手元のスマホやPCですぐに参照可能です。現在は「30日間の無料体験」や、対象者限定の「3か月499円プラン」なども実施されています。まずはご自身のアカウントでどのようなオファーが表示されるか確認してみてください。
