[[20031213223115]] 『数式内の配列とは』(kobi) >>BOT

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『数式内の配列とは』(kobi)

 お世話になっております。最近の回答の中に、
[[20031213162708]]『countif関数を使って○△×を数える』(masabou5) などで

 =SUMPRODUCT((A1:A10={"○","△","×"})*1)
 というような数式内の { }を見かけるようになりました。
 この数式内の配列?の使用法、解説をお願いしたいんですが…。
 配列数式の使い方と違って、そのまま{ }と打ちこんでもOKなんですねぇ。

 SUMPRODUCTで検索すると89件あります。
[[20020920173138]] 『条件が2つあるときCOUNTIFを使って』(JIN) 
で行列数式で回答しましたが、尋さんのSUMPRODUCT関数の活用案内で開眼し、この便利な関数を利用しています。
=SUMPRODUCT((A1:A10={"○","△","×"})*1)の式で
A1の値が配列{"○","△","×"}にあればTRUEで1、なければFALSEで0を返します。これに*1とします。
このA1〜A10まで格納した値を合計します。結局、積の合計SUMPRODUCTになります。
お遊び例題
A1に1〜10の乱数を発生させる式 =INT(RAND()*10)+1 を入力しA40までコピーします。
B1:B10に1〜10の連番入力、C1に =SUMPRODUCT(($A$1:$A$40=B1)*1) と入力C10までコピーします。
C11に =SUM(C1:C10) 当然値は40になります。[F9]を押して再計算して確認して下さい。
これを =SUMPRODUCT((A1:A40={1,2,3,4,5,6,7,8,9,10})*1) とすれば、C1:C11の処理が出来てしまいます。
kobiさんのようなEXCELのベテランに72歳に近づいたおいぼれが返答するのは筋違いですが、
正しい説明は他のEXCEL愛好家に期待します。
SUBPRODUCT関数大好きな・・・(シニア)

 (シニア)さま、丁寧な解説ありがとうございました。
常々、(シニア)さんはじめ達人の皆さんの技に敬服しております。
達人技を吸収するべくとりあえず引き出しに保存してるんですが、
後で検証する間もなく次々とたまる一方でして、"整理しなけりゃただの物置"ですよね。
ちょっと使い方が違うかもしれませんが、これからも達人技の解説をお願いすると思います。よろしくお願いしまーす。
怠惰ですが、全くベテランではありません。お恥ずかしい(kobi)


  ↑
 更に付け加えるべきは、切っ先鋭い笑えるコメント。
    すがやんのコメント愛読者(弥太郎)

 うーむ、うーむと唸るばっかし。皆さん返事ありがとうございます。
本来というか、ヘルプなどのSUMPRODUCT関数は =SUMPRODUCT(配列1、配列2、・・・) の積の和を求めますよね。
で、=SUMPRPDUCT((配列など)*(条件など))として、条件式の個数をカウントする。いわばANDの条件式の合計ということでしょうか。
で、 (シニア)さんの=SUMPRODUCT((A1:A40={1,2,3,4,5,6,7,8,9,10})*1) は、ORの条件式の合計と考えればいいのかな?
(通りすがりの者)さん、理解力が乏しくてすみません。
>=SUMPRODUCT((A1={"A","B","C"})*{10,200,3000})なども出来ますよ。
具体的に例題などで、解説お願いしていいですか?
                         解説収集マニア (kobi)

 kobiさん予測通りEXCELの解析力抜群ですね!
=SUMPRODUCT((A1:A40={1,2,3,4,5,6,7,8,9,10})*1) は
=SUMPRODUCT((A1:A40=1)+(A1:A40=2)+(A1:A40=3)+(A1:A40=4)+(A1:A40=5)+(A1:A40=6)+(A1:A40=7)+(A1:A40=8)+(A1:A40=9)+(A1:A40=10))
でORの条件式の合計になります。
 (シニア)



 度々すみません。
 >赤穂の方々も
何のことか聞こうと思って、やっと気がつきました。えへえへ
(通りすがりの者)さんの
=SUMPRODUCT((A1={"A","B","C"})*1, {10,200,3000})を利用すると、
=SUMPRODUCT((B164={"A","B","C","D","E","F","G","H","I","J"})*{1,2,3,4,5,6,7,8,9,10})
のように、IFのネスト数を気にせず利用できますねぇ。それで、さっきから
b=164{}でなく、SUMPRODUCT((b164<={})とかの条件分岐が出来ないものか悩んでます。
先生方、可能なことでしょうか?
   本日おもしろくて学校とエクセルを往復してました。エクセルに酔った(kobi)
   あ、酒飲まなきゃ!


 訳判らんこと書いてすみません。例えば
=IF(b164<=100,"A",IF(b164<=80,"B",・・ というような条件分岐の式を
=SUMPRODUCT((b164<={100,80,60…}*{"A","B","C"…})というように出来れば、
IF関数のネスト数の呪縛に捉われなくてすむかと考えました。
    以前、無理やりネスト技?で登校したことがある厚顔可憐な(kobi)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.