![見出し画像](https://assets.st-note.com/production/uploads/images/127511576/rectangle_large_type_2_81a6250f6020b53dc58b58040132a05f.png?width=1200)
不一致データを出力する関数の回答紹介
備忘録、後で、読み返したいので、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関数で表現する人も数名いらっしゃいました。
クイズを出すたびに思うのですが、ほんと、勉強になります。
考え方、関数の使い方、今後も、思い付きで、投稿したいと強く思いました!
で、
この記事が気に入ったらサポートをしてみませんか?