やはりマッチとテーブルは相性がいい?

ここ最近、毎日Excelでシステム作成に勤しんでいる。
私個人のスキルと照らし合わせてみれば、かなり大規模なシステムだ。
その中で、Match関数を使う機会があった。
f:id:Infoment:20200608215816p:plain

いつもなら、マクロで値をセットするところ。しかし今回は、特定の場面でマクロを使えない事情があった。しかも、VLOOKUP関数も使えない。

ということで、普段あまり使用しないMatch関数とIndex関数を使うことにした。
イメージとしては、↓こんな感じだ。
f:id:Infoment:20200608220323p:plain

左端にあるコードで探すなら、VLOOKUP関数が使用できる。しかし今回は、品名で探す必要がある。

そこでまず、表がテーブルとして設定されていない場合で関数を組んでみる。
f:id:Infoment:20200608220713p:plain

案の定、読み解くのがシンドイ数式になってしまった。

続いて、価格表をテーブル化してみよう。ついでに、品名欄に名前をつけてみる。
f:id:Infoment:20200608221033p:plain

果たして無味乾燥な英数字の羅列から一転、引数の意味を知っていれば、何をどうしているか一目瞭然の数式に早変わりした。

ちなみに、マクロでこのセルに数式をセットするなら、こんな感じか。

Sub Sample()
    Dim Tb As Excel.ListObject
    Set Tb = ActiveSheet.ListObjects(1)
        Range("F4").FormulaR1C1 = "=INDEX(" & Tb.Name & ",MATCH(品名,価格表テーブル[品名],0)," & Tb.ListColumns("単価").Index & ")"
End Sub

Index関数の「3」がマクロでは「単価の列番号」という指定になったことで、
レイアウトの変更にも対応できるようになっている。

ただ、実務に於いてはこれほど単純には行かなかった訳で。

続く、かもしれない。

参考まで。