Excelで複数の条件に基づくVBA INDEX MATCH (3つの方法)

  • これを共有
Hugh West

大量のデータがある場合、特定のデータを抽出するのが難しいことがあります。 Excelの INDEX MATCH は、巨大なデータセットであっても、あらゆるデータを取得することができます。 ブイビーエー は、Excelであらゆる操作を実行するための最も効果的で、迅速かつ安全な方法です。 この記事では、3つの異なる方法を紹介します。 複数条件に基づくINDEX MATCH をエクセルで表示します。 VBAマクロ .

ワークブックダウンロード

練習用Excelワークブックは、こちらから無料でダウンロードできます。

VBA 複数条件に基づくINDEX MATCH.xlsm

Excelで複数条件に基づくVBA INDEX MATCHを使用した3つのメソッド

を実行する方法を紹介します。 範囲の複数条件に基づくINDEX MATCH , 特定の選択に対して テーブル用 をエクセルで表示します。 ブイビーエー .

この記事で扱うデータセットは上記のとおりです。 生徒名 , 学生証です。 試験マーク 他の2つの列の条件に基づいて、1つの列に存在する特定の結果を抽出します。

基準-1:Excelで複数(2次元)のルックアップを行うINDEX MATCHを使ったVBAを組み込む

次の画像を考えてみましょう。 特定の生徒の名前""を保存しています。 エッジ" において セルG4 を検索する列を指定します。 結果 にしています。 試験マーク に格納されます。 セルG5 で検索します。 試験マーク カラムに格納し マークス その" エッジ" 入り込む セルG6 .

ルックアップする手順は、結果的に 二次元配列 をもって INDEX MATCH をエクセルで表示します。 ブイビーエー を以下に示します。

ステップス

  • はじめに を押してください。 Alt + F11 キーボードから、またはタブで 開発者 -> Visual Basic を開く Visual Basic エディター .

  • 次に、ポップアップ・コード・ウィンドウで、メニューバーから インサート -> モジュール .

  • それから。 コピー 以下のコードと 貼り付ける をコードウィンドウに入力します。
 Sub IndexMatchStudent() Dim iSheet As Worksheet Set iSheet = Worksheets("Two Dimension") iSheet.Range("G6").Value = Application.WorksheetFunction.Index(iSheet.Range("C5:D14"), Application.WorksheetFunction.Match(iSheet.Range("G4"), iSheet.Range("B5:B14"), 0), Application.WorksheetFunction.Match(iSheet.Range("G5"), iSheet.Range("C4:D4"), 0)) End Sub 

これであなたのコードは実行できるようになりました。

  • を押してください。 F5 をキーボードで入力するか、メニューバーから Run -> Run Sub/UserForm をクリックするだけでもOKです。 スモールランアイコン をクリックすると、マクロが実行されます。

コード実行後、以下のgifで結果を確認してください。

その結果 マークス その" エッジ" が試験に受かった。 67 で取得される。 セルG7 .

VBAコード説明

 Dim iSheet As Worksheet 

Worksheetの変数を定義する。

 Set iSheet = Worksheets("Two Dimension") 

ワークシート名を格納します。 このシートの名前は「Two Dimension」ですが、スプレッドシートに合わせて名前を付けてください。

 iSheet.Range("G6").Value = Application.WorksheetFunction.Index(iSheet.Range("C5:D14"), Application.WorksheetFunction.Match(iSheet.Range("G4"), iSheet.Range("B5:B14"), 0), Application.WorksheetFunction.Match(iSheet.Range("G5"), iSheet.Range("C4:D4"), 0)))であり、iシートはiSheetFunction(G4)である。 

このコード片は、範囲を選択する C5:D14 をルックアップ範囲とし,セル G4 範囲内 B5:B14 に格納され、一致するものを検索する。 G5 範囲内 C4:D4 を作成し、その結果をcellに渡します。 G6 .

続きを読む 日付範囲に複数の条件を指定してINDEX MATCHを使用する方法

基準 - 2: ユーザー定義関数(UDF)を使用してINDEXでMATCH値を検索するマクロを適用します。

データセットからマッチした値を抽出するには ユーザー定義関数 次の画像から、これから行うのは 学生証 試験マーク を投げます。 名称 その特定の生徒の

について、その実現方法を確認してみましょう。 生徒名 "Finn" をもって ブイビーエー .

ステップス

  • 先に示したように、オープン Visual Basic エディター から デベロッパー タブと インサート a モジュール をコードウィンドウに表示します。
  • 次に、コードウィンドウで コピー 以下のコードと 貼り付ける それを
 Function MatchByIndex(x As Double, y As Double) Const StartRow = 4 Dim EndRow As Long Dim iRow As Long With Worksheets("UDF") EndRow = .Range("C:D").Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious) .Row For iRow = StartRow To EndRow If .Range("C" & iRow).Value = x And .Range("D" & iRow).Value = y ThenMatchByIndex = .Range("B" & iRow).Value Exit Function End If Next iRow End With MatchByIndex = "Data Not Found" End Function 

  • 走らない このコード 救う それを
  • 今すぐ ワークシートに戻る の興味を引く。 任意のセルを選択 この場合、結果を保存するのは セルF5 .
  • そのセルの中で を書く。 しゅきせいぎょそうち で作成したコード( MatchByIndex ) と 学生証と受験票を渡す は、関数の括弧の中にある特定の生徒のものです。

名前を抽出しようとしているため、" フィン" 彼のもとから ID (105) マークス (84) ということで、この場合の計算式は次のようになります。

=MatchByIndex(105,84)

  • 次に、 を押します。 入力 .

次の画像を見てください。

セルF5 という名前を取得することに成功しました。 フィン" を通すだけで ID マークス で作成した関数の内部で ブイビーエー のコードになります。

VBAコード説明

 関数 MatchByIndex(x As Double, y As Double) 

新しい関数を作成し、その中で変数を渡します。 関数の名前は自由に定義することができます。

 Const StartRow = 4 

この行は4行目から始まっています。

 Dim EndRow As Long Dim iRow As Long 

変数を定義する。

 With Worksheets("UDF") EndRow = .Range("C:D").Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious) .Rowを指定する。 

まず、作業するワークシートを定義します。 このシートの名前は "UDF "ですが、あなたのスプレッドシートに合わせて名前を付けてください。 次に、範囲検索を開始します。 C:D を定義した最初の行から、最後の行まで。

 For iRow = StartRow To EndRow If .Range("C" & iRow).Value = x And .Range("D" & iRow).Value = y Then MatchByIndex = .Range("B" & iRow).Value Exit Function End If Next iRow End With 

最初の行から最後の行まで反復処理を開始します。 もし、関数内で渡す最初の値が C 列の中にあり、関数内で渡す2番目の値が D カラムにマッチしたものを返します。 B そうでない場合は、関数を終了し、すべてのステートメントを終了し、次の行に進みます。

 MatchByIndex = "データが見つかりませんでした" End Function 

実行中に前の条件が満たされない場合、"Data Not Found "メッセージが返され、コードはこの関数から離脱します。

続きを読む Excelで部分テキストを複数の条件でINDEX-MATCHする(2つの方法)

基準-3:Excelで複数データのあるテーブルからMATCH値を返すVBAを実装する

このセクションでは、以下の方法について学びます。 テーブルのインデックスに一致する値をMsgBoxに返す において ブイビーエー エクセル

を抽出する方法を見てみましょう。 マークス を、私たちのデータセットに示されている表から( T できること Name: TableMatch )を提供することで、特定の生徒の 名称 とのことです。 ID この例では 名称 とのことです。 ID であろう フィン 105 を、それぞれご紹介します。

ステップス

  • まず、オープン Visual Basic エディター から デベロッパー タブと インサート a モジュール をコードウィンドウに表示します。
  • それから。 コピー 以下のコードと 貼り付ける をコードウィンドウに入力します。
 Sub ReturnMatchedResultByIndex() Dim iBook As Workbook Dim iSheet As Worksheet Dim iTable As Object Dim iValue As Variant Dim TargetName As String Dim TargetID As Long Dim IdColumn As Long Dim NameColumn As Long Dim MarksColumn As Long Dim iCount As Long Dim iResult As Boolean Set iBook = Application.ThisWorkbook Set iSheet = iBook.Sheets("Return Result") Set iTable = Application.Workbook As Worksheet (iBook "RESULT"))の設定。iSheet.ListObjects("TableMatch") TargetID = 105 TargetName = "Finn" IdColumn = iTable.ListColumns("Student ID").Index NameColumn = iTable.ListColumns("Student Name").Index MarksColumn = iTable.ListColumns("Exam Marks").Index iValue = iTable.DataBodyRange.Value For iCount = 1 To UBound(iValue) If iValue(iCount, IdColumn) = TargetID Then If iValue(iCount, NameColumn) = "Finn"(「Finn」は、「Fin」)。TargetName Then iResult = True End If iResult Then Exit For Next iCount If iResult Then MsgBox "ID: " & TargetID & vbLf & "Name: " & TargetName & vbLf & "Marks: " & iValue(iCount, MarksColumn) Else MsgBox "ID: " & TargetID & vbLf & "Name: " & TargetName & vbLf & "Marks Not Found (マークが見つかりません)" End If End Sub 

これであなたのコードは実行できるようになりました。

  • 後日談です。 実行 というコードを書き、その結果どうなったか、次の画像を見てください。

上の画像でお分かりのように マイクロソフトエクセル を表示するポップアップメッセージボックスが表示されます。 マーク数:84 ID: 105 名前:Finn という、コード内で提供した

VBAコード説明

 Dim iBook As Workbook Dim iSheet As Worksheet Dim iTable As Object Dim iValue As Variant Dim TargetName As String Dim TargetID As Long Dim IdColumn As Long Dim NameColumn As Long Dim MarksColumn As Long Dim iCount As Long Dim iResult As Boolean 

変数を定義する。

 Set iBook = Application.ThisWorkbook Set iSheet = iBook.Sheets("Return Result") Set iTable = iSheet.ListObjects("TableMatch") 

シート名とテーブル名を変数に設定する。

 TargetID = 105 TargetName = "Finn" IdColumn = iTable.ListColumn("Student ID").Index NameColumn = iTable.ListColumn("Student Name").Index MarksColumn = iTable.ListColumn("Exam Marks").Index 

ルックアップ値と検索するルックアップカラムを格納する。

 iValue = iTable.DataBodyRange.Value For iCount = 1 To UBound(iValue) If iValue(iCount, IdColumn) = TargetID Then If iValue(iCount, NameColumn) = TargetName Then iResult = True End If If iResult Then Exit For Next iCount 

このコードでは、添え字の先頭から末尾までをスキャンし、検索列で定義されたIDと名前の一致を見つけたら、結果を保存してすべての文を閉じます。 また、反復処理を終了して次のコードに進みます。

 If iResult Then MsgBox "ID: " & TargetID & vbLf & "Name: " & TargetName & vbLf & "Marks: " & iValue(iCount, MarksColumn) Else MsgBox "ID: " & TargetID & vbLf & "Name: " & TargetName & vbLf & "Marks Not Found (マークは見つかりません)" End If 

MsgBoxに結果を投げます。

続きを読む Excelで複数の値を1つのセルに連結して検索して返す

結論

最後に、この記事では、3種類の方法を紹介しました。 複数条件に基づくINDEX MATCH をエクセルで表示します。 VBAマクロ この記事が皆様のお役に立てれば幸いです。 また、ご質問等ございましたらお気軽にお寄せください。

Hugh West は、業界で 10 年以上の経験を持つ、非常に経験豊富な Excel トレーナー兼アナリストです。彼は会計と財務の学士号と経営管理の修士号を取得しています。ヒューは教えることに情熱を持っており、理解しやすい独自の教育アプローチを開発しました。彼の Excel に関する専門知識は、世界中の何千人もの学生や専門家がスキルを向上させ、キャリアで優れた成果を上げるのに役立ってきました。 Hugh はブログを通じて知識を世界に共有し、個人や企業が潜在能力を最大限に発揮できるよう無料の Excel チュートリアルとオンライン トレーニングを提供しています。