配列数式や VBA を使用せずに 2 つの列から一意の値のリストを抽出する

配列数式や VBA を使用せずに 2 つの列から一意の値のリストを抽出する

2つのデータ列AとBがあります。これらの列を結合して、最終的なリストに一意の値のみが含まれるようにしたいと思います。現時点では、https://www.get-digital-help.com/2009/06/16/extract-an-unique-distinct-list-from-two-columns-using-excel-2007-array-formula/:

{=IFERROR(IFERROR(INDEX($A$2:$A$20, MATCH(0, COUNTIF($C$1:C1, $A$2:$A$20), 0)), INDEX($B$2:$B$7, MATCH(0, COUNTIF($C$1:C1, $B$2:$B$7), 0))), "")} 

これは非常にうまく機能しますが、配列数式は、すでに性能の悪い PC の速度を大幅に低下させるため、可能な限り使用を避けたいと思います。また、何らかの理由で VBA を使用できないため、これも選択肢ではありません。

これを実行する方法はありますか?

答え1

まあ、今のところはうまくいっているように見える方法を見つけましたが、確かに見栄えはよくありません。

列 A には、合計 200 個の値を含むデータのセットがあります。

列 B には 2 番目のデータ セット (たとえば 175 個の値) があります。

列Cは列Bの値が列Aに存在するかどうかをチェックします

 =IF(COUNTIF($A$2:$A$750,B2)>0,"Match","No Match")

列Eには、列Aのデータセットの終わりからの相対的な位置を追跡するカウントがあります。

=IF(A2=0,MAX($E$1:E1)+1,"")

列Fには、列Cが一意の値を示すたびに増加するカウントがあります。

=IF(C2="No Match",MAX($F$1:F1)+1,"")

列 G は、2 つのデータ セットが結合される場所です。最初に、列 A の値がリストされます。リストの最後に達して 0 の検索を開始すると、列 E で作成されたインデックスを使用して、列 B の最初の一意の値を検索し、最終値に達するまで増分します。

=IF(A2=0,IF(E2>MAX(F:F),"",INDEX(B:B,MATCH(E2,F:F))),A2)

答え2

ユニークで異なる値を抽出する方法については、次のサイトで詳しく説明されています。このExcelチュートリアルウェブサイト

あなたの質問に対する答えは「はい」です。各パーツに追加の INDEX() を使用するだけです。変更内容は次のとおりです。

=IFERROR(INDEX($A$2:$A$20,MATCH(0,INDEX(COUNTIF($C$1:C1,$A$2:$A$20),0),0)),INDEX($B$2:$B$7,MATCH(0,INDEX(COUNTIF($C$1:C1,$B$2:$B$7),0),0)))

一番外側の IFERROR() を省略しました。お役に立てば幸いです。

関連情報