Excel VBAでテーブルの値を検索する方法【VBA】

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

コードの解説

  1. テーブルを設定する
    Set tableRange = ThisWorkbook.Sheets("Sheet1").ListObjects(tableName)
    検索対象となるテーブルを特定します。このコードでは tableName という変数にテーブル名を指定しています。
  2. 行方向の検索
    rowNum = Application.WorksheetFunction.Match(searchRowValue, rowDataRange, 0)
    行方向の検索には Match 関数を使います。テーブルの1列目(rowDataRange)から、セル M3 に設定された値 searchRowValue に一致する行番号を取得します。
  3. 列方向の検索
    colNum = Application.WorksheetFunction.Match(searchColValue, headerRange, 0)
    列方向の検索も同様に Match 関数を使用します。テーブルのデータ部分の3行目(headerRange)から、セル N3 に設定された値 searchColValue に一致する列番号を取得します。
  4. 検索結果の表示
    resultValue = tableRange.DataBodyRange.Cells(rowNum, colNum).Value
    検索した行と列の位置から値を取得し、MsgBox を使って結果を表示します。

3. 応用: 値を他のセルに表示する

取得した値を MsgBox ではなく、シート上の任意のセルに表示することも可能です。以下のコードでは、検索結果を V3 セルに表示します。

Sheets("Sheet1").Range("V3").Value = resultValue

まとめ

このコードを使えば、Excel VBAで特定の条件に一致するテーブルの値を簡単に検索し、利用することができます。大量のデータや複数条件での検索が必要な場合、この方法は非常に便利です。テーブル内でのデータ処理を効率化したいときに、ぜひお試しください。

副業から独立まで「稼げる」Webスキルを習得する(PR)

ここまで読んでいただきありがとうございます。 最後に宣伝をさせてください。

「副業を始めたいが、何から手をつければいいかわからない」「独学でスキルはついたが、収益化できていない」という悩みを持つ方には、マンツーマン指導のWebスクール**「メイカラ」**が適しています。

このスクールは、単に技術を教えるだけでなく、**「副業として具体的にどう稼ぐか」**という実務直結のノウハウ提供に特化している点が特徴です。

講師陣は、実際に「副業Webライターから1年で独立して月収100万円」を達成したプロや、現役で利益を出し続けているブロガーなど、確かな実績を持つプレイヤーのみで構成されています。そのため、机上の空論ではない、現場で通用する戦術を学ぶことができます。

副業に特化した強み

  • 最短ルートの提示: 未経験からでも実績を出せるよう、マンツーマンで指導。
  • AI活用の習得: 副業の時間対効果を最大化するための、正しいAI活用スキルも網羅。
  • 案件獲得のチャンス: 運営がWebマーケティング会社であるため、実力次第で社内案件の紹介など、仕事に直結する可能性があります。

受講者の多くは、「在宅でできる仕事を探している」「副業を頑張りたい」という20代・30代・40代が中心です。

受講前には、講師による無料説明が行われます。無理な勧誘はなく、自分に合った副業スタイルやプランを相談できるため、まずは話を聞いてみることから始めてみてはいかがでしょうか。

ブログで稼ぎたいなら「メイカラ」

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次