2 つの列間で一致する値と一致しない値を見つけて、以下のようにフォーマットするにはどうすればよいですか?
入力:
| expected | match | forward | backward | actual |
|----------|-------|---------|----------|--------|
| a | | | | b |
| b | | | | c |
| c | | | | r |
| d | | | | s |
| e | | | | |
出力:
| expected | match | forward | backward | actual |
|----------|-------|---------|----------|--------|
| a | b | a | r | b |
| b | c | d | s | c |
| c | | e | | r |
| d | | | | s |
| e | | | | |
forward
- には存在するが、 ()expected
には存在しないactual
SQL left outer join
backward
- には存在するが、 ()actual
には存在しないexpected
SQL right outer join
expected
クエリから取得したものですSQL
。RDBMSに列がない場合がたくさんあるのでactual
、比較するにはExcelを使用する必要があります。通常はExcelを使用して比較できますVLOOKUP
が、時間がかかり、必要な形式が得られません。実行できるソリューションが必要です。重要なのは上記の形式になります。
ご提案があれば歓迎します。
答え1
情報が上記のようにレイアウトされていると仮定すると、C3、D3、E3 にそれぞれ次の 3 つの数式を使用できます。
C3
=IFERROR(INDEX(F:F,AGGREGATE(15,6,ROW($B$3:$B$7)/(COUNTIF($B$3:$B$7,$F$3:$F$7)>0),ROW(A1))),"")
D3
=IFERROR(INDEX(B:B,AGGREGATE(15,6,ROW($B$3:$B$7)/(COUNTIF($C$3:$C$7,$B$3:$B$7)=0),ROW(A1))),"")
E3
=IFERROR(INDEX(F:F,AGGREGATE(15,6,ROW($F$3:$F$7)/((COUNTIF($C$3:$C$7,$F$3:$F$7)=0)*($F$3:$F$7<>"")),ROW(A1))),"")
数式を 7 行目までコピーすると、次のようになります。
注: AGGREGATE
関数 15 では配列のような計算を実行します。そのため、AGGREGATE
関数内では完全な列参照を使用しないでください。データ セットに近いものに制限してください。そうしないと、空白セルに対する膨大な計算によってコンピューターが停止する可能性があります。
答え2
Power Queryの場合、キー変換は次のようになります。マージクエリこれはSQLの結合に似ており、同様の用語を使用します。最初のステップは、期待されるそして実際の列。マッチリストの場合は、結合タイプ = 内部を使用してクエリを作成します。フォワードリストでは、結合タイプ = 左反を使用して別のクエリを作成し、次に後ろ向きRight Anti を使用します。
すべてをあなたが提示したとおりにまとめるのは少し面倒ですが (それが本当に必要な場合)、各クエリにインデックスを追加し、インデックス列でマージ結合 (結合タイプ = 左外部) を使用して、各行の各クエリから 1 つの結果を取得できると思います。