my学備忘録

忘れっぽいエンジニア(一応)が勉強のために残す備忘録ブログ。技術系を中心にや読んだ本とか勉強になったことなど。

【Excel】複数条件のデータが存在するか確認したい【SUMPRODUCT編】

仕事でVBAを使う事になり、Excelについて勉強中…。

検索とかで、FindとかVLOOKUPとかMATCHとか見ててふと、

「複数の組み合わせを持つデータが存在するかどうかはどうやって確認するんだろう?」

と思ったので、少し調査。

ものすごく雑な例を出すとこんな感じ。

f:id:mamemamemaame:20171007222127p:plain

こんな感じで似たような組のデータがあります。

左側と右側で比較すると、同じ組み合わせはありますが、違う組み合わせもあります。

この時、「左右どちらも含まれる組み合わせはどれか?」という確認がしたい、

というのが今回の条件です。

で、色々調べましたが、SUMPRODUCT関数に行き着きました。

参考にしたページ

Excel(エクセル)基本講座:SUMPRODUCT関数の使い方

SUMPRODUCT関数は、

・配列に対応する要素間の席を計算し、その和を返す

・複数条件の件数をカウントしたり、合計数を出せる ←ここがポイント

上記を参考に記述してみました。

f:id:mamemamemaame:20171007223020p:plain

一行目の関数式を書くとこんな感じ

=SUMPRODUCT(($A$1:$A$10=D1)*($B$1:$B$10=E1))

(以降下のセルはオートフィルで埋める)

一つ目は左組のアルファベット列の中で、D1(右組一番上のアルファベット)と同一である。

二つ目は左組の数値列の中で、E1(右組一番上の数値)と同一である。

この2つの式の論理積を取るわけですから、

右側を支点にして、「左側のアルファベットと左側の数値の組み合わせが同じ数を表示する

ということになります。

出力結果としても、左側の組の中で、右側の組と同じ組み合わせなのは、

A-1(2つ)

B-1(1つ)

C-4(1つ)

E-5(2つ)

ということですね。

列が分かれた複数の組み合わせの中から、同じ組み合わせを抽出するときはSUMPRODUCT関数を使えば良さそうですね。

VBAも書いてるんですが、

VBAは性能を気にしながらコーディングしなきゃいけないらしいので、

コーディングするときは非効率なアルゴリズムは避けたほうがよさそうですね。

本買うならここら辺あたり買いたいなぁ。

【2017/10/24 追記】

同条件をCOUNTIFS関数を用いた場合どうなるか書きました。

mame-bibouroku.hatenablog.com