• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:2つのエクセルデータを【ぶつけて】、データ抽出する)

2つのエクセルデータをぶつけてデータ抽出する

このQ&Aのポイント
  • 2つのエクセルデータを比較して、一方に存在しないデータを追加する方法について説明します。
  • エクセルのデータ抽出方法として、2つのデータを比較する際に、一方に存在しないデータを追加する手順を紹介します。
  • エクセルで2つのデータをぶつけて比較し、一方に存在しないデータを追加する方法について解説します。

質問者が選んだベストアンサー

  • ベストアンサー
  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.1

エクセル操作例です。 図1をSheet1、図2をSheet2としてSheet3に抽出します。 (1)Sheet2のデータをSheet1の最終行にコピー&ペースト (2)Sheet3のA1を選択→フィルタ→フィルタオプションの設定→指定した範囲を選択→リスト範囲欄にSheet1!$A:$B、抽出範囲欄にA1、重複するレコードは無視するを選択→OK (3)Sheet3はNOで並び替え(昇順)をして下さい。

aoyama-reiko
質問者

お礼

素早い回答ありがとうございました。 大変、わかりやすく、助かりました。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

こういうのは、バッチ処理(データが出来上がっていて、作業が終わるまでは動かないデータの処理)ではマッチング(または併合=マージ)というアルゴリズムで出来る。このアルゴリズムはアルゴリズムの本に書いてある代表的なもの。 次のたとえでイメージが判るだろう。 各人は自分の番号を書いた番号札を持つ。 両グループの各人は両グループ2列に並び、各グループの中で番号の順に並んで出番を待つ。 会場に左右2つの椅子が(両グループの対戦用の席)があるとする。 両グループ(本質問では図1のデータと図2のデータ)から1名(本質問では1行のデータ)ずつ、自分の番号を書いたカードを持って出て、自分のグループの椅子に腰をかけて、カードをだして番号を見せ合い、番号の大小で勝負する。 A。同じときーー>両方とも退場(椅子を明け渡す)  両グループから次の順番のもの1名ずつが両方の椅子に座る B。右の席の番号が小さいーー>右(小さい方)の者が退場。 .退場したグループの椅子には、そのグループの次の順番の者が椅子に座る。 C。左の席の番号が小さいーー>左(小さい方)が退場。 .退場したグループの次の順番の者が、そのグループの方の椅子に座る。 引き分けや負けて退場する(椅子を明け渡す)ときは、その番号と持っているデータを出口のノートに上行から順に詰めて書き留める(コンピュター的にはアウトプットすること)。2人同時退場のときは1方だけがノートに書く ーー 但し 初回だけは両グループから1名ずつ席に着く(上記ルールの例外) 両グループが同数・最後が同キーで無いと相手が途絶えるときが在る。その後の勝負はどうするか。そのときも上記のルールを適用できるよう、自分が最後なら次に両グループで一番大きいと思われる番号札を椅子席に置いて退場する。 最後に大きい番号札だけ残ったら終了(上記のAのケースで終了)。普通はこういう工夫がされる。 ーーーー こういう方法で ・質問のようなことや、 ・両者付き合うべきものの不突き合い(1方を中心にして、キー的に見て漏れや余分)がわかり ・両者の内容が同じかどうかチェック ・両ファイルのデータの結合が出来る(一方に番号ー住所、1方に番号ー年齢があるとき、番号ー住所ー年齢のファイルが作れる) 今回は質問者がVBAをわかるかどうか(多分出来ない)と思うのでコードは書かない。(今まで回答に書いたことはあある) ーー この処理方法は、両レコードを1回だけ読めば終わるので、能率が良い(ソートという処理時間を別にすると) 関数とかで処理が重たくなったらこういう方法を考えないといけないだろう。 A.エクセルの範囲内なら、既に出ているフィルタオプションを使う B。エクセルのデータを一旦アクセスに移し(写すのは簡単)、アクセスで処理する C.出来合いのソフトがあるかもしれない などが考えられる。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

図1がシート1に有り、図2がシート2にあるとして、図3をシート3に作るとします。 シート3のA2セルから下方にはNoを入力します。 その上でB2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(A2="","",IF(COUNTIF(Sheet1!A:A,A2),INDEX(Sheet1!B:B,MATCH(A2,Sheet1!A:A,0)),IF(COUNTIF(Sheet2!A:A,A2),INDEX(Sheet2!B:B,MATCH(A2,Sheet2!A:A,0)),"")))

aoyama-reiko
質問者

補足

すばい、回答ありがとうございます。関数できれいに抽出できました。

関連するQ&A