SUMPRODUCT関数について
excel2010
SUMPRODUCT関数で、式の内容が理解できず教えてください。
sheet1に、A22からAM1047までデータがあります。B,E列を参照し、
sheet2のA、Cに設定された内容で抽出するという内容になっています。
具体例を下記に示します。
sheet1の構成
A1~AM21までは題目が記載されています。抽出したいデータ対象ではありません。
A列は見出しの内容でほとんど空欄です。
A427セルに本体、以降空欄が続きA490セルにヘッド、また空欄が続きA544セルに
見出しの内容といった感じです。
B22~B30セルにX001という識別コード(同じものが9)
B30~B39セルにX002という識別コード(同じものが9)
以降、識別コードがB1047セルまで入ります。
E22~E30までは、a,b,c,d,e,f,g,h,iという検索内容が入ります。
以降同じ検索内容が続きます。
H22~H1047まで数字のデータが入ります。
上記以外の列は無関係なので説明省略。
下記のイメージです。
A1からAM20までにも何かしら内容が入っていますが、関係ないので説明省略。
A21の様に記載しているのはセルアドレス、その直下は入っている内容です。
A21 B21 E21 H21
名称 コード 検索 3月2日
A22 B22 E22 H22
準備 X001 a 0
X001 b 3
X001 c 2
X001 d 5
X001 e 2
X001 f 0
X001 g 3
X001 h 0
X001 i 0
X002 a 4
X002 b 7
X002 c 0
X002 d 0
X002 e 1
X002 f 3
X002 g 0
X002 h 0
X002 i 3
…
A427 B427 E427 H427
本体 X701 a 0
X701 b 0
X701 c 1
X701 d 0
X701 e 2
X701 f 3
X701 g 0
X701 h 0
X701 i 1
…
A490
ヘッド X792 a 4
X792 b 7
X792 c 2
X792 d 0
X792 e 1
X792 f 3
X792 g 0
X792 h 0
X792 i 3
sheet2は
A1 C1 D1
コード 検索
X001 c 2
X002 c 0
X003 c 0
X004 c 0
X005 c 0
X006 c 0
X007 c 0
X008 c 0
X009 c 0
…
X701 c 1
X792 c 2
の様にコードと検索条件でD列にsheet1からデータをひっぱってきたいのです。
下記はsheet2のD27セルに設定した内容です。
=IF(SUMPRODUCT((Sheet1!$B$22:$B$1047=$A27)*(Sheet1!$E$22:$E$1047=$C27)),
INDEX(Sheet1!H$22:H$1047,SUMPRODUCT((Sheet1!$B$22:$B$1047=$A27)*(Sheet1!$E$22:$E$1047=$C27)*(ROW(sheet1!$A$1:$A$1026)))),"-")
webや過去のokwebのsumproduct関数について調べた上で上記式にたどり着き、この内容で、sheet1の内容をひっぱってくるので良いのですが、
最後の*(ROW(sheet1!$A$1:$A$1026))の部分が理解できません。
疑問の内容は、下記2点
(1)単独でROW(sheet1!$A$1:$A$1026)を実施すると1になります。
しかしながら、
=IF(SUMPRODUCT((Sheet1!$B$22:$B$1047=$A27)*(Sheet1!$E$22:$E$1047=$C27)),
INDEX(Sheet1!H$22:H$1047,SUMPRODUCT((Sheet1!$B$22:$B$1047=$A27)*(Sheet1!$E$22:$E$1047=$C27)*1)),"-")
としてフィルハンドコピーすると、全ての行が27行目の値になってしまいます。
何故1ではだめなのでしょう?
(2)データの範囲はA22からAM1047なので範囲を下記の様に同じにしてみました。
*(ROW(sheet1!$A$1:$A$1026))→*(ROW(sheet1!$A$22:$A$1047))
とすると全く正しく抽出されません。0になってしまいます。
*(ROW(sheet1!$A$1:$A$1026))が*(ROW(sheet1!$A$1:$A$1025))
の様に設定すると#N/Aとなり、抽出する設定条件で必要なのですが、
この*(ROW(sheet1!$A$1:$A$1026))の意味を教えていただきたく。
お礼
どうもありがとうございました!!! 丁寧な説明でとても良くわかりました。式の意味がわからないと、応用ができない為、これで色々と試してみようかと思います。