web-dev-qa-db-ja.com

SQLと同じようにExcelで2つのワークシートを結合するにはどうすればよいですか。

2つの異なるExcelファイルに2つのワークシートがあります。どちらも名前、ID番号、および関連データのリストを含みます。 1つは一般的な人口統計フィールドを含むマスターリスト、もう1つは名前とID、および住所のみを含むリストです。このリストは他の事務所によってマスターリストから削除されました。

2番目のリストを使用して最初のリストをフィルタリングします。さらに、2番目のワークシートの住所フィールドと共に、マスターワークシートの他のフィールドも結果に含めるようにします。データベース内部結合を使用してこれを非常に簡単に実行できる方法はわかっていますが、Excelでこれを効率的に実行する方法についてはあまり明確ではありません。 Excelで2つのワークシートを結合する方法外部結合を行う方法を示すこともボーナスポイントであり、マクロを必要とせずにこれを行う方法を知っていることを強くお勧めします。

119
Joel Coehoorn

2007+の場合はData> From Other Sources> From Microsoft Queryを使用してください。

  1. Excel Fileを選択して最初のExcelを選択してください
  2. 列を選択
    (列のリストが表示されない場合は、必ずOptions> System Tablesを確認してください)
  3. Data> Connections> [作成したばかりの接続を選択]> Properties> Definition> Command text

これで、このCommand textをSQLとして編集できます。どのような構文がサポートされているかはわかりませんが、暗黙的な結合、「内部結合」、「左結合」、およびすべてうまくいく結合を試しました。これがサンプルクエリです。

SELECT *
FROM `C:\Users\Peter\Documents\Excel-to-Excel\Source_1.xlsx`.`Sheet1$` a
LEFT JOIN `C:\Users\Peter\Documents\Excel-to-Excel\Source_2.xlsx`.`Sheet1$` b
ON a.col2 = b.col2
155
Aprillion

受け入れられた答えを支持しなさい。 「列を選択してください(列のリストが表示されない場合は、[オプション]> [システムテーブル]を必ず確認してください)

Excelファイルを選択すると、おそらくthis data source contains no visible tablesプロンプトが表示され、利用可能なタブと列はなくなります。 Microsoft は、Excelファイルのタブが "システムテーブル"として扱われ、 "システムテーブル"のオプションが選択されていないというバグ であることを認めましたデフォルトでそれで、このステップで慌てないでください、あなたはただ「オプション」をクリックして、そして「システムテーブル」をチェックする必要があります、そしてあなたは利用可能な列を見るでしょう。

11
Ben Lin

VLOOKUPとHLOOKUPは、一致する主キー(垂直または水平に格納されている)を検索し、 'attribute'列/行から値を返すために使用できます。

8
Reuben L.

Microsoft Power Queryを使用できます。これは、新しいバージョンのExcelで使用できます(一般的な回答と似ていますが、はるかに単純で簡単です)。 Power Query呼び出しは「マージ」を結合します。

最も簡単な方法は、2つのExcelシートをExcelテーブルとして用意することです。次にExcelで[Power Query]リボンタブに移動し、[From Excel]ボタンをクリックします。両方のテーブルをPower Queryにインポートしたら、いずれかを選択して[結合]をクリックします。

6
anotherfred

Excel内からExcelテーブルにSQLスタイルの結合を実行することはできません。そうは言っても、あなたがやろうとしていることを成し遂げるには複数の方法があります。

Reubenが言っているように、Excelでは、おそらく最もうまくいく式はVLOOKUPHLOOKUPです。どちらの場合も、一意の行で一致し、見つかったIDの左側の指定した列\ rowの値を返します。

2番目のリストに2つ以上のフィールドを追加するだけの場合は、2番目のリストに式を追加します。 「外部結合」スタイルの表が必要な場合は、検索が見つかったかどうかをテストするためにVLOOKUPを指定して最初のリストにISNA式を追加します。 Excelのヘルプで特定のインスタンスでこれらを使用する方法について十分な詳細情報が得られない場合は、お知らせください。

SQLを使用する場合は、データをデータベースプログラムにリンクし、クエリを作成して結果をExcelにエクスポートします。 (Accessでは、Excelワークシートまたは名前付き範囲をリンクテーブルとしてインポートできます。)

3
mischab1

Microsoft Queryを使用したAprillionの回答は優れていると思いますが、Microsoft Accessを使用して、はるかに簡単なデータシートに参加することができました。

もちろんMS Accessがインストールされている必要があります。

ステップ:

  • 新しいAccessデータベースを作成します(またはスクラッチDBを使用します)。
  • Excelのデータを新しいテーブルとしてインポートするには、Get External Dataを使用します。
  • テーブルがどのように結合されているかを示すには、Relationshipsを使用します。
  • 必要なものに合わせて[関係の種類]を設定します(左結合などを表す)。
  • テーブルを結合する新しいクエリを作成します。
  • 結果を生成するにはExternal Data->Export to Excelを使用してください。

Aprillionのすばらしい答えがなければ、私は本当にそれができなかったでしょう。

3
Dizzley

XLTools.netでは、MS QueryがExcelテーブルに対するSQLクエリで特に機能するための優れた代替手段を作成しました。これは XLTools SQL Queries と呼ばれます。 MS Queryよりもはるかに使いやすく、SQLを作成して実行するだけの場合は非常にうまく機能します。VBAやMS Queryを使用した複雑な操作は不要です。

このツールを使用すると、埋め込みSQLエディタを使用してExcelワークブック内のテーブルに対して任意のSQLクエリを作成し、新規または既存のワークシートに結果を表示するオプションを指定してすぐに実行できます。

LEFT OUTER JOIN(RIGHT OUTER JOINとFULL OUTER JOINのみがサポートされていません)を含むほとんどすべての種類の結合を使用できます。

これが一例です。

XLTools SQL Queries - Query Builder

3
Peter Liapin

Excel 2007ユーザーの場合:データ>他のソースから> Microsoft Queryから> Excelファイルを参照

この記事のによると、XLSバージョン2003から照会すると、「このデータソースには可視のテーブルが含まれていません」という結果になる可能性があります。ワークシートはSYSTEMテーブルとして扱われるため、エラーが発生します。そのため、クエリを作成するときに[クエリWizard - 列の選択]ダイアログのオプションの[システムテーブル]を確認してください。

結合を定義するには、次のようにします。[Microsoft Query]ダイアログ> [テーブル]メニュー> [結合] ...

元のExcelシートにデータを返すには、[Microsoft Query]ダイアログボックスの[ファイル]メニューから[Excelシートにデータを返す]を選択します。

2
clarkttfu

データベースに精通している場合は、SQL Serverを使用して両方のワークシートをリンクサーバーとして接続してから、T-SQLを使用してバックエンドデータの作業を行うことができます。その後、ExcelをSQLに接続してデータをテーブル(通常またはピボット)に格納します。 Powerpivotの使用を検討することもできます。フラットデータベースとして使用されるExcelを含む、あらゆるデータベースソース間の結合が可能になります。

0
dav

私が遭遇したのと同じ問題を探しています RDBMerge 、これは複数のExcelワークブック、csvファイルおよびxmlファイルからのデータをにマージするためのユーザーフレンドリーな方法であると思いますサマリーワークブック。

0
lalthomas