激凹みから立ち直る方法

=IF(PRODUCT(INDEX((A1:C3=A7:C9)*1,0)),"OK","NG")

少し前に出ていたスレで見たのですが、
全く分かりません。
細かくどういう内容なのかを教えてください。

質問者は「条件付き書式で」と言っていたのに、
急遽これで満足してしまったみたいで、
何だったのかと思っていますが、
それはさておき。

チャンと説明が在り、全体的には分かったのですが、
INDEX((A1:C3=A7:C9)*1,0)
の部分が分かりません。
説明では対応する9つのセルを比較して
合っていれば1、違っていれば0にする、ということだと思うのですが、
なぜ、これでそうなるのか。

自分なりに調べたところでは、
indexは行、列から値を取ると在りました。
色々サンプルもありましたが、
この形式は調べた中には出てきませんでした。
宜しくお願いします。

A 回答 (6件)

配列による比較が分かりにくいということ?


こちら↓のサイトの説明で理解できるか不安ですが。
https://biz-data-analytics.com/excel/bits-of-exc …
配列数式としてなら。
https://www.shegolab.jp/entry/excel-compare-data …
スピルを使える環境なら、比較していることも理解しやすいかも。
https://www.kmds.jp/pc_kowaza/03_compare/

今回の添付画像はF1セルに
 =A1:C3=A7:C9
を入れてスピルさせたものです。
このような配列を使った比較を使えば、作業列が不要となります。

スピルを使える環境なら、以下のような数式でも対応できます。
=IF(AND(A1:C3=A7:C9),"OK","NG")
(添付画像のF7セルで使用)

※注 エラー値がセル範囲にあると、どの場合もエラーになります。
エラー処理を必要としない場合のみ、使える方法だということです。
「index関数の説明をお願いします。」の回答画像6
    • good
    • 0
この回答へのお礼

まさにこれです。
こんなことができるということが知りませんでした。
100%納得です。
お世話になりました。

お礼日時:2024/08/17 11:15

ある程度理解していたのですね。



もう一度、以下の数式で説明します。
 =INDEX((A1:C1=A7:C7)*1,0)
このときB1セルとB7セルの内容を比較したとき、違っている場合の配列は
{A1=A7,B1=B7,C1=C7}を比較したもので、{TRUE,FALSE,TRUE}での
結果を返します。これを乗算で{1,0,1}の配列として返しPRODUCT関数の
処理で =1*0*1 の計算をすると、0を返すのでIF関数ではNGとなります。

どこか別のセルに =INDEX((A1=A7)*1,0) を記載して、3列3行のセルに
オートフィルしてみてください。
それぞれの参照したセルの比較結果を1または0として表示されます。
「index関数の説明をお願いします。」の回答画像5
    • good
    • 0
この回答へのお礼

何回も申し訳ありません。
誠に申しあげにくいのですが、
私の質問が正しく捉えられていないみたいなので、
これを最後にします。
(もう一度No2のお礼を読んでみて欲しいのですが)

細かく説明していただいた内容は分かっています。
分からないのは、
(A1:C1=A7:C7)の書き方/表現の仕方です。
この書き方で「それぞれの対応セルを比較する」ということになるのか、
という質問です。
こんな書き方/表現の仕方が私が調べた説明には出ていなかったので知りたいのです。
何となくは、”=”が在るので比較するのかなとは思いましたが。

気に障ったら申し訳ありません。
宜しくお願いします。

お礼日時:2024/08/17 06:46

再度失礼しました。


画像を添付するのを忘れていました。
「index関数の説明をお願いします。」の回答画像4
    • good
    • 0

No.2の回答者です。


画像も用意したので、参考にしてください。
 =INDEX((A1:C3=A7:C9)*1,0)
の場合に[関数の引数]ダイアログで表示されるものです。

それと、No.2の回答に一部に誤りがありました。
「(A1:C3=A7:C10)*1の配列では必要です。」は
「(A1:C3=A7:C9)*1の配列では必要です。」が正しいものでしたね。
    • good
    • 0
この回答へのお礼

重ねてありがとうございます。
>画像も用意したので、参考にしてください。
 申し訳ありません。
 見方が分かりません。

お礼日時:2024/08/16 13:39

こちら↓の質問でベストアンサーに選ばれた数式ですね。


https://oshiete.goo.ne.jp/qa/13890771.html

INDEX関数が配列を返すことは理解できるかと思います。
https://support.microsoft.com/ja-jp/office/index …

質問の数式の場合だと説明文が長くなるので、一部省略で説明を
しますね。
 =INDEX((A1:C1=A7:C7)*1,0)
この例の場合なら、すべてのセル内容が同じだと
 =INDEX({1,1,1},0)
と同じ意味になります。
乗算部分を消すと
 =INDEX({TRUE,TRUE,TRUE},0)
になることは理解できるかと思います。(すべて一致した配列)
{TRUE,TRUE,TRUE}の配列に「*1」で乗算することで{1,1,1}になり、
PRODUCT関数で計算できるようになります。
ちなみに、引数の行番号を0にすることで、指定範囲全体の配列を
取り出してくれるので、(A1:C3=A7:C10)*1の配列では必要です。

質問の関数だと
 =INDEX({1.1.1;1.1.1;1.1.1},0)
のように、3行3列の配列を返します。
これをPRODUCT関数で処理すれば、
 =1×1×1×1×1×1×1×1×1 (=1*1*1*1*1*1*1*1*1)
で1になり、IFでの処理だとOKになるのです。
    • good
    • 0
この回答へのお礼

具体的かつ細かく説明いただき、有難うございます。
貼っていただいたリンクを含め、説明は分かっているつもりです。
質問が下手だったと思いますが、
分からない部分は質問に書いたとおり、
「=INDEX((A1:C3=A7:C9)*1,0)」の部分でして、
なぜ、(A1:C3=A7:C9)で対応しているセルを比較する、
ということになるのかが分からないのです。
こんな書き方があるのか、という質問です。
後ろの「*1,0)」の部分は何となくですが分かっているつもりです。

お礼日時:2024/08/16 13:38

貴方が見た、その「少し前に出ていたスレ」のURLを示してください。


ちなみに、貴方が投稿したこのスレのURLは
https://oshiete.goo.ne.jp/qa/13892789.html
です。
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A