見出し画像

不一致データを出力する関数の回答紹介

備忘録、後で、読み返したいので、noteで記録してきます。

■ ワイの回答

=SORT(LET(DATA,SORT(MAP(UNIQUE(_DATA),LAMBDA(_A,IF(COUNTIF(_DATAa,_A)=0,_A,""))),,-1),TAKE(DATA,XMATCH("",DATA,0,1)-1)))

ま、COUNTIFを使って不一致を検索して、TAKE関数で出力している感じです。やっぱり、読みにくいですね、LAMBDA関数が入るだけで、ちょっと難しくなっちゃうのが、難点ですよね。
それでは、天才達の回答を見ていきたいと思います。

1.伽藍堂リャミ様のご回答

=SORT(UNIQUE(FILTER(_DATA[データ],ISERROR(XMATCH(_DATA[データ],_DATAa[データa])))))

私は、COUNTIFで判定しましたが、XMATCH関数で不一致を検索する方法ですね。私より簡単な数式で、ISERROR関数で、なんとなく「不一致を求めている」ことが読み解けて、素晴らしい回答です。

2.たーぼー(インコ)様のご回答

=SORT(UNIQUE(FILTER(_DATA[データ],COUNTIF(_DATAa[データa],_DATA[データ])=0)))

私と同じ考えで作成した数式で、私のよりシンプルで良いですよね!

3.佐藤嘉浩(Officeの魔法使い)様のご回答

=SORT(FILTER(A1:A22,COUNTIF(C:C,A1:A22)=0))

実は、この回答は、不正解になってしまいます。
出力される結果が少なくなるし、項目までも出力されてしまいます。
Xでポストした絵から作ったのかなぁって思います。
仮に、データ範囲を是正しても、重複したデータが出てしまいます。
課題は、重複が無い出力が条件ですので、重複が出ない様にする必要があります。
ただ、考え方は素晴らしく、私と同じく、COUNTIFで、不一致を求めています。逆に表現すると、一致データを出力できるようになるんですよね。

4.華月様のご回答

=LET(データ,UNIQUE(_DATA[データ]),データa,UNIQUE(_DATAa[データa]),
     ループ,LAMBDA(ループ,実行行,
                   LET(行データ,IF(ISERROR(MATCH(INDEX(データ,実行行),データa,0)),
                                  INDEX(データ,実行行),""),
                                   IF(COUNTA(データ)=実行行,行データ,
                                      VSTACK(行データ,ループ(ループ,実行行+1)))
                    )),
     一覧,ループ(ループ,1),
SORT(FILTER(一覧,一覧<>"","")))

再帰・・・華月様・・・もう、ド変態(誉めている)です。
正直解読不可能ですが、不一致は、MATCH関数を利用しています。
INDEX関数でデータを読み取っていますね。
数式でつくる再帰は良く理解していないので、良い事例として、記録します。まじで、凄い。

5.光希桃様のご回答

=SORT(UNIQUE(TOCOL(DROP(HSTACK(UNIQUE(A:A),C:C,C:C),1),3),FALSE,TRUE))

DROP関数を使った、素晴らしい回答。
まったく思いつかなかった方法なので、ある条件のセルは省きたい場合に有効なんだ!って、勉強になりました。
数式もシンプルで読みやすいので、良い回答だと思います!

6.さ いも子様のご回答

=TEXTSPLIT(TEXTJOIN("/",1,SORT(UNIQUE(IF(ISERROR(MATCH(_DATA[データ],_DATAa[データa],0)),_DATA[データ],"")))),,"/")

まさかの、TEXTSPLIT関数の登場です。
数式をみて、なるほどーって思いました。
この手の手法は、データの正規化にでも役に立ちます。
是非とも覚えたいやり方ですよね!

7.青りんご@Excel関数様のご回答

=SORT(UNIQUE(FILTER(_DATA[データ],ISNA(XMATCH(_DATA[データ],_DATAa[データa])))))

この手の回答(XMATCH関数)が一番多かったですよね。
こちらは、ISERROR関数ではなく、ISNA関数を使っていますね。
うん、読みやすい数式です!

8.y.yusuke様のご回答

=IFERROR(INDEX(_DATA[データ],MATCH(AGGREGATE(15,6,COUNTIF(_DATA[データ],"<="&_DATA[データ])/ISERROR(1/(COUNTIFS(_DATAa[データa],_DATA[データ])+COUNTIF($E$1:E1,_DATA[データ]))),1),INDEX(COUNTIF(_DATA[データ],"<="&_DATA[データ]),),0)),"")

なんと、なんと、配列関数を使わない回答が出てきました!
これは、想定外でした!
ユニークなデータを出力できてて、まじで凄い!
エラーを上手に利用してて、凄いとしか、言葉が出てきません!

● 感想

不一致データを重複なく出力する方法としてお題を出させていただきました。
一部、全体を読み解けなかった変態チック(再帰の華月様)な回答もありましたが、不一致と言えば、XMATCH関数ということですね。
私と同じ、COUNTIF関数で表現する人も数名いらっしゃいました。

クイズを出すたびに思うのですが、ほんと、勉強になります。
考え方、関数の使い方、今後も、思い付きで、投稿したいと強く思いました!
で、

いいなと思ったら応援しよう!