ULALA'Sブログ

ULALA'Sブログ

2020年08月19日
XML
カテゴリ: VBA
​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ 前回はVLookupについて記載したが、
検索したい値が表の左にあり、
取得したい値がその右にある場合は、
VLookupで取得可能だが、その逆はできない。

つまり、 検索したい値が右にあり、
取得したい値がその左にある場合は、
VLookupで取得しようとするとエラー に
なってしまう。

セルの値指定とかはかなり柔軟なクセに
これ出来ないのかよ!と思う方も多いと思う。
というかほとんどの方が思うであろう。。

こういう時は、
WorksheetFunction.Match
と
WorksheetFunction.Index
を利用することで実現できる。

前置きが長くなったが今回は以下
を記載してみる。



①WorksheetFunction.Match
②WorksheetFunction.Index



こちらもいっぺんに見ていこうと思う。

前回は八百屋からリンゴの値段を 抽出したが
今回は リンゴの値段から
八百屋の名前を抽出 してみる。
※下段の検索ボタン配下参照



ソース
Sub getMatchAndIndex ()
' 検索結果番号
Dim idx As Long
' 位置を抽出
idx = WorksheetFunction.Match ( Range Value , Range ("H80:H89"), 0)
' 位置に合致する八百屋の名前を抽出
Range ("Y89"). Value = ​WorksheetFunction.Index​ ( Range ("D80:D89"), idx )
End Sub

結果


WorksheetFunction.Matchの引数 は、、
第1引数:検索対象の値
第2引数:検索する範囲
第3引数:検索方法(※)
※完全一致(0)、近似値以下で最大(1)、近似値以下で最小(-1)

第3引数についてはややこしく、
0:これは完全一致なので指定した金額と同じものを検索する
​1:検索する範囲が昇順かつ検索範囲の中で検索対象を超えない最大値
-1: 検索する範囲が降順かつ検索範囲の中で検索対象を超えない最小値 ​


1と-1を指定した場合は検索する範囲が昇順(降順)に並んでいる
必要
​があるのでやや使いづらい。

そのうえで ​​ 検索対象の値に合致(もちくは近似値)したものの
位置(行番号) を返す ​​
。​

Matchなのに位置(index)を返すのでさらにややこしい。

WorksheetFunction.Indexの引数 は、、
第1引数: 検索する範囲
第2引数:対象範囲の行番号
第3引数:対象範囲の列番号(省略可)
第4引数:領域番号?(省略可)

Matchで位置が返却されるので、第1引数の範囲から、
第2引数の位置(行番号)を指定することで、抽出したい行を
特定する。

今回の例でいえば、 ​​ 130円のリンゴはどの八百屋で売っているか? ​​

​ということなので、 130を検索すると、Match関数により6番目 が​
抽出できる。

その6番目を用い、 Index関数を利用して6番目の八百屋、
つまり「八百屋F」が抽出 されることになる。

Index関数の第3引数、第4引数についてはテキストに
記載が無いため省略するが、公式サイトには記載されているので
​一度目を通しておくと良いかと思う。
※テストにここまで出題されるかは不明、、

<参考>
​ Match関数 ​
​ Index関数 ​

​​





お気に入りの記事を「いいね!」で応援しよう

最終更新日  2020年08月22日 10時05分37秒
コメント(0) | コメントを書く


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
X

PR

×

プロフィール

ULALA13

ULALA13

カレンダー


© Rakuten Group, Inc.
X
Design a Mobile Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: