実際のデータベースではなくExcelにデータがあるとしましょう。 1つのシートに、1つの列がIDとして機能するデータがあり、この列の値が一意であることを確認しました。別のシートで、私はまたIDとみなすことができる1つの列を持ついくつかのデータを持っています、そしてそれはまたユニークです。シート1の行Nに何らかの値があり、シート2の行Mに同じ値がある場合、行Nと行Mは同じ実世界オブジェクトを記述しているはずです。
私が求めているのは、どのようにしてマクロを書かずに完全外部結合と同等のものを得ることができるのでしょうか。リボンからアクセスできる数式やすべての機能は問題ありません。
小さな「プレイデータ」の例:
シート1:
Dostoyevski Russia
Pushkin Russia
Shelley England
Flaubert France
Hugo France
Eichendorff Germany
Byron England
Zola France
シート2:
Shelley Percy Bysshe
Eichendorff Josef Freiherr Von
Flaubert Gustave
Byron Lord
Keller Gottfried
Dostoyevski Fyodor
Zola Emile
Balzac Honoré de
希望する出力(ソートは重要ではありません)
Dostoyevski Russia Fyodor
Pushkin Russia
Shelley England Percy Bysshe
Flaubert France Gustave
Hugo France
Eichendorff Germany Josef Freiherr von
Byron England Lord
Zola France Emile
Keller Gottfried
Balzac Honoré de
このシナリオに怯えている人は誰にでも:これは間違ったやり方であることを私は知っています。私が何か選択肢があるならば、私はこれのためにExcelを使用しないではないでしょう。ただし、実際的な解決策が必要な状況は十分にあり、stat、および(ITの観点から)より良い解決策は適用できません。
まず、両方のテーブルから両方のキー列を1つの新しいシートに1列としてコピー&ペーストします。
「重複の削除」を使用して、すべての一意のキーの単一のリストを取得してください。
次に、各表の各データ列に1つずつ、合計2つの列(この場合)を追加します。数式をより見やすくするために、テーブルオプションとしてフォーマットを使用することをお勧めします。 vlookupを使用して、次の式を使用してください。
=IFERROR(VLOOKUP([@ID],Sheet4!A:B,2,FALSE),"")
ここで、Sheet4!A:B
は、ソーステーブルのデータテーブルがそれぞれの値ごとに何であるかを表します。 IFERRORは、vlookupが成功しなかった場合に表示される#N/Aという見苦しい結果を防ぎ、この場合は空白のセルを返します。
これであなたの結果テーブルが得られます。
シート3:
シート4:
結果データ:
結果の式(Ctrl+~ これを切り替えます。
組み込みのSQLクエリでもこれを行うことができます。それは...はるかにユーザーフレンドリーではありませんが、おそらくより良いユースケースになるでしょう。これはおそらくあなたが「ソース」データをテーブルとしてフォーマットしていることを要求するでしょう。
「減算結合を作成してから結合として追加する」部分はもっと複雑です。
作成した最初の外部結合に戻ります。 SQLを手動で編集して
Union
を追加失神のためではありません。しかし、Officeの更新されていない部分が生き生きとしている部分を目にする機会がほしいのであれば、それは大きなチャンスです。
別の解決策として、 Power Query を提案できますか。これは、基本的にまさにこの種のことを実行するためのMicrosoftからの無料のExcelアドインです。その機能は実際にはExcel 2016にも直接含まれるため、将来的には使用できなくなります。
とにかく、Power Queryを使えば、ステップはかなり単純です。
これに関して素晴らしいことは、一度あなたがこれを設定したら、あなたがあなたの基本データテーブルに変更を加えるならば、あなたはちょうどData> Refresh Allを押すと、あなたのPower Query結果シートも同様に更新される。