• ベストアンサー

エクセルシート間の照合について

エクセルシート間で照合をしたいと思っています。 照合する項目は2つ。2つともあえばそのA列のデータを表示するというものです。 データは シート1(前年) A  B  C  D 1  田中 123 東京都・・ 5  佐藤 124 千葉県・・ 3  山本 128 埼玉県・・ シート2(今年) A  B  C  D   山本 128 埼玉県・・   佐藤 124 北海道・・   田中 123 東京都・・ C列とD列を照合し2つともあえばシート2のA列にシート1のA列のデータを入力する。なければ「なし」と入力できるようにしたいのです。 上の場合は山本のA列に「3」佐藤には「なし」田中には「1」と入るのうになればと思います。 入力されている列は同じですが順番はばらばらです。データ数は1万件を超えています。 どなたかアドバイスいただければと思います。よろしくお願いします。     

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

  • ベストアンサー
  • hkd9001
  • ベストアンサー率48% (99/204)
回答No.2

wanwanwan2 さん、こんにちは。 さて、ご質問の趣旨に合ったマクロのサンプル、作ってみました(動作検証済)。ひとつだけ注意点ですが、マクロ中「sheet1」「sheet2」のところを、それぞれ いまお使いのシート名にあわせてくださいね。 i = 1 While (Sheet1.Cells(i, 1) <> "") flg = 0 j = 1 While ((Sheet1.Cells(j, 1) <> "") And (flg = 0)) If ((Sheet1.Cells(j, 3) = Sheet2.Cells(i, 3)) And (Sheet1.Cells(j, 4) = Sheet2.Cells(i, 4))) Then Sheet2.Cells(i, 1) = Sheet1.Cells(j, 1) flg = 1 End If j = j + 1 Wend If flg = 0 Then Sheet2.Cells(i, 1) = "なし" End If i = i + 1 Wend

wanwanwan2
質問者

補足

回答をいただきありがとうございます。 追加で質問なんですが、もってくる列がA列だけでなくほかにもある場合にはどのようにしたらいいでしょうか。

その他の回答 (3)

  • hkd9001
  • ベストアンサー率48% (99/204)
回答No.4

再びレスありがとうございます。 では 以下の2点をチェックしてみていただけますか? (1)スクリプト上の、すべての「Sheet1」が「前年度」に、「Sheet2」が「新年度」に、それぞれ もれなく変更されているかどうか (2)変更するときに、すぐ前の「(」(カッコ)や、すぐ後ろの「.」(ピリオド)を誤って削除していないか …よろしくお願いいたします。

wanwanwan2
質問者

お礼

何度も回答をいただきありがとうございます。 フリーズではなく時間がかかっていただけでした。待っていれば完璧な動作をしてくれました。 おかげさまで、何日もかかっていた作業が短時間でこなすことができます。 本当にありがとうございました。

wanwanwan2
質問者

補足

お返事ありがとうございます。 「sheet1」を「Sheets("前年度")」にすることで、うまくいきました。 本当にありがとうございます。が、データ量が多いせいか、途中でフリーズしてしまいます。CPUの使用率が100%になってしまうんです。 データが削ってマクロを実行させると完璧なんですが無理があるんでしょうか? データ量は13.1MB 件数は各シートに13000件です。

  • hkd9001
  • ベストアンサー率48% (99/204)
回答No.3

wanwanwan2 さん、レス ありがとうです! さて、A列以外にE列、F列からも持ってきたい場合は: 私の書いたコードの中ほど「 Sheet2.Cells(i, 1) = Sheet1.Cells(j, 1) 」のあとに Sheet2.Cells(i, 5) = Sheet1.Cells(j, 5) Sheet2.Cells(i, 6) = Sheet1.Cells(j, 6) を、そして同じく下方「 Sheet2.Cells(i, 1) = "なし" 」のあとに Sheet2.Cells(i, 5) = "なし" Sheet2.Cells(i, 6) = "なし" を追加していただければOKです。

wanwanwan2
質問者

補足

お返事ありがとうございます。 教えていただいた式をコピペしてシートの名前を変更したところ最初のところでとまってしまいます。なぜでしょう? サンプルをつくてシート名を変更せずsheet1だとうまくいったのですが・・。 シート名は「前年度」「新年度」です。 お手数をかけますが、よろしくお願いします。

回答No.1

マクロを使うか、シートをソートすればいいのでは? 件数が1万件を超えているとの事ですので、自分の場合はマクロを作って計算させますね。 (1)シート1のC列X段目をシート2のC列から探す (2)シート2の該当する段のD列からデータを取得する (3)取得したデータとシート1のX段目D列のデータと照合する (4)一致した場合は、シート2の該当段A列にシート1のX段目A列のデータをコピー (5)不一致なら”なし”と入力 (6)段を一つずらして(1)から再開 ってな感じですか。 C列に同一データがある場合はB列も見つつ判定しなければいけませんが。

wanwanwan2
質問者

補足

回答をいただきありがとうございます。マクロわからないので、関数でと思っていましたが、月曜日に職場でやってみます。 それでC列には同じデータがありますが、A列に入っているデータも同じなんですが。

関連するQ&A

  • 【エクセル】リストの照合について教えてください!!

    sheet1に、下記の様に600件の氏名が書いてあります。 A      B 1     山田太郎  2     鈴木花子 ・・・ 600   佐藤次郎 sheet2に、地域と氏名がずらっと書いてあります。 A      B      C     D    E 東京都   神奈川県   埼玉県   千葉県  茨城県 山田太郎 鈴木太郎 山田花子 佐藤次郎 ・・・ このsheet2の地域を、sheet1のC列に下記の様に入れたいのですが、 どの様に行ったら良いでしょうか? みなさんのお知恵をください!!宜しくお願い致します。 A      B      C 1     山田太郎   東京都 2     鈴木花子   神奈川県 ・・・ 600   佐藤次郎   埼玉県

  • 【至急】エクセルで、一致するデータを紐付けたい

    エクセルでsheet1のA列のデータに、sheet2の並び順の異なるA列~F列のデータを紐付け、一致、並び替えする方法がありましたら、ご教授ください。よろしくお願いいたします。 ※sheet1のA列とsheet2のA列は、同じデータですが順不同で入力されています。 sheet1 A   B   C   D   E   F   G 田中 斉藤 新井 伊東 塚越 佐藤 吉田 sheet2 A   B    C     D      E      F   斉藤 東京都 文京区 123-0000 0120-・・・ × 伊東 東京都 台東区 123-1000 0120-・・・ ○ 新井 東京都 江東区 123-0000 0120-・・・ × 吉田 東京都 豊島区 121-0100 0120-・・・ △ 塚越 東京都 文京区 122-0000 0120-・・・ × 佐藤 東京都 新宿区 121-0000 0120-・・・ ○ 田中 東京都 大田区 111-0000 0120-・・・ ◎ ◆得たい結果◆ sheet1 A   B   C    D      E      F     G 田中 田中 東京都 大田区 111-0000 0120-・・・ ◎ 斉藤 斉藤 東京都 文京区 123-0000 0120-・・・ × 新井 新井 東京都 江東区 123-0000 0120-・・・ × 伊東 伊東 東京都 台東区 123-1000 0120-・・・ ○ 塚越 塚越 東京都 文京区 122-0000 0120-・・・ × 佐藤 佐藤 東京都 新宿区 121-0000 0120-・・・ ○ 吉田 吉田 東京都 豊島区 121-0100 0120-・・・ △

  • エクセルで照合に適切な関数を教えてください。

    すっごく困っているのでよろしくお願いします。 sheet1・・・Aの情報  sheet2・・・Bの情報 sheet3・・・二つの照合結果 A・Bはそれぞれ入力件数、並び順(行・列)もまったく違います。 例) sheet1・sheet2  A列・・・都道府県  B列・・・市区  C列・・・町 件数は同じ東京都○○区でもC列の町名が違った場合は、複数件になります。

  • Excel シート間のデータの照合

    Excelで、シート間のお客様データ(だいたい各1万件)を照合します。下記は現在の照合方法ですが、これでは時間がかかるうえ手作業が多く発生しミスにつながります。頻繁に行う作業なので、関数でも、マクロでも、とにかくもう少し簡単にできる方法がありましたら、どうぞご教授ください。よろしくお願いします!! 【目的】 シート「sheet2008」には2008年度のデータ。シート「sheet2007」には「sheet2008」と同じ形式の2007年度のデータが入っています。シート「sheet2008」に、そのお客様の2007年度の担当営業マンを表示させたいのです。 【例】 列A(電話番号): 011-231-1112 列B(名前):佐藤 一郎 列C(住所):北海道札幌市中央区北1-1-1 列D(担当営業マン):鈴木 新規の列(2007年度の担当営業マン):鈴木  ・「sheet2008」「sheet2007」はほぼ同じデータですが、一部のお客様は名前が変わっていたり、住所が変わっていたりします。  ・「sheet2007」にないお客様が「sheet2008」にあったり、その逆があったりして、各シートのデータ件数は一致しません。  ・名前が同じでも住所が違うデータ、電話番号が同じでも担当営業マンが違うデータは別者として扱います。  ・「顧客ID」のような“必ずユニークな情報”は存在しません。 【現在の照合方法】 (1)「sheet2008」の各列の前に空白列を挿入する。  (データの1行目はタイトル行…B1:電話番号/D1:名前/F:住所/H:担当営業マン)  (データの2行目以降はデータ)     列A(空白行):     列B(空白行): 011-231-1112     列C(空白行):     列D(名前):佐藤 一郎     列E(空白行):     列F(住所):北海道札幌市中央区北1-1-1     列G(空白行):     列H(担当営業マン):鈴木 (2)「sheet2007」を列Aの電話番号で昇順に並べ替える。 (3)「sheet2008」の電話番号が「sheet2007」にあるかを調べる。     A2:「=IF(B2=(VLOOKUP(Sheet2008!$B2,Sheet2007!$A:$D,1,0)),"○","▲")」 (4)(3)で調べた「sheet2008」の電話番号と同じ行にある名前/住所が「sheet2007」にあるかを調べる。     C2:「=IF(D2=(VLOOKUP(Sheet2008!$B2,Sheet2007!$A:$D,2,0)),"○","▲")」     E2:「=IF(F2=(VLOOKUP(Sheet2008!$B2,Sheet2007!$A:$D,3,0)),"○","▲")」 (5)電話番号/名前/住所がすべて一致するデータについて、「sheet2007」にある担当営業マンの値を列Gに表示させる。     G2:「=IF((AND(A2="○",C2="○",E2="○"))=TRUE,(VLOOKUP($B2,Sheet2007!$A:$D,4,0)),"▲") (6)"▲"やエラー値で表示される計算結果について、目視で確認する。 (終了)

  • EXCLEのマクロ 2つのシートを統合する方法

    下記のことを行いたいのです。 教えていただけないでしょうか。 下記2つのシートをA列をキーにして sheet1のあ、b、c列のデータに sheet2のc、d列を 統合して、sheet1のdれつ e列に統合して5列のデータを作りたい a列とb列のデータは基本同じですが、スペースが入っていたり 違う場合もある。B列はsheet1のデータを採用 sheet2は不要 ・sheet1 a列 b列 C列 123 ああ 123456 456 いい 125456 789 うう 12344556 1234 ええ 12345678 4567 おお 123456456 8945 かか 1234567844 ------------------- ・sheet2 a列 B列 C列 D列 123 ああ 03-5212-0000 東京都○ 456 いい 06-5212-0000 大阪府○ 789 うう 044-5212-0000 神奈川県○ 1234 ええ 045-512-0000 横浜市○ 4567 おお 043-212-0000 埼玉県○ 8945 かか 03-5212-0000 東京都○

  • excelで検索に最適な関数を教えて下さい。

    sheet1にデータがあります。     A      B      C        D 1  県名    会社名    住所      電話番号 2 埼玉県   山田商事   埼玉県…     04-… 3 東京都   佐藤商事   東京都…     03-… 4 東京都   中田商事   東京都…     03-…    …      …      …        … 上記のデータが約500有ります。 表示用sheet2の A1に入力規則を活用して、県名を(例えば東京都と)入力すると A2に東京都 佐藤商事 東京都… 03-… A3に東京都 中田商事 東京都… 03-… が表示させるようにしたいです。 VLOOKUPだと中田商事の行が表示されず、上手くできませんでした。 オートフィルタだとsheetが違う点と、同じ県の会社が多いために、表示が縦に長くなるので見にくいです。 同じ県の会社は多くても50くらいなので、できれば30行くらいまで表示すると、続きはEに県名、Fに会社名として表示できれば一画面に多く表示でき助かります。 関数でできると思うのですが、どうすれば良いでしょうか? わかる方教えてください。よろしくお願いします。

  • Excelで特定の行だけ別シートに抽出する方法

    sheet1に下記のリストを作ります。 番号  名前    郵便番号     住所    電話番号     会社名  部署 1    高橋    〒111-1111   東京都   00-0000-0000  ○×    人事 2    田中    〒222-2222   神奈川県  111-11-1111   △□   営業 3    佐藤    〒333-3333   埼玉県    22-2222-2222  ・・・・   ・・・・ sheet2のA1に番号を入力すると「1」とした場合   名前    郵便番号    住所     部署   高橋    〒111-11111  東京都   人事 というように該当の列の特定の列だけを表示させる方法はありますでしょうか? 自動で抽出したいのですが、なにとぞよろしくおねい致します。

  • エクセルSheet1,2を使っての行ごとでの値の返し方

    Sheet1にデータを行ごとに入れていきます。 Sheet2にSheet1のデータを行ごとに返します。 例えば下記のようなデータがSheet1にあります。 行/列  A     B     C    D     登録番号 申込み日  氏名   住所  1  h1234  15年2月  山田太郎 東京都品川区   2  k0022  14年8月  田中次郎 千葉県浦安市   3  m3651  15年1月  鈴木三郎 埼玉県川口市   4  g7890  13年6月  佐藤四郎 神奈川県横浜市 Sheet2のA1にSheet1の行3のデータを返すため3と入れます。登録番号を入れたいので、次のような関数を入れてみましたがうまく出来ませんでした。 =IF(ISNUMBER(A1),INDIRECT(Sheet1!A3&A1),"") 何がいけないのかわかりませんでした。 それに、出来れば登録番号の数字(全て4桁です)返したいのですが、さらに、MIDを使えばよいのですか?説明が十分かどうかわかりませんがアドバイス宜しくお願い致します!

  • エクセル 複数シートにまたがるデータの抽出

    複数シートからのデータ抽出についていくつか拝見いたしましたが 知識が足らず、操作できませんでした。 下記のような抽出が可能であれば、ご教授いただけたらと思います。 なお、VBやマクロ等は使用したことは、ほぼありません。 シートが複数あり、またそのシートが増えていく可能性があります。 シート名→「start」「佐藤」「山本」「end」「集計1」「集計2」ととりあえず作成。 (「集計1」にて別のデータ合計をとるため、「start」「end」シートを作成しました。  なお、佐藤~山本のシートは同じ書式ですが、シート名が変わる可能性も高い。  今回したいのは「集計2」においてです) 「佐藤」シート   A   B   C   D 01 佐藤 02 \  月曜 火曜 水曜 03 6:00  1   0.5   1 04 7:00  1    1 05 ~ 18 21:00 「山本」シート   A   B   C   D 01 山本 02 \  月曜 火曜 水曜 03 6:00 04 7:00  1   1   1 05 ~ 18 21:00  1   1   1 「集計2(曜日毎で、月曜)」シート   A   B   C   D 01 月曜 02 03 6:00 佐藤 04 7:00 佐藤 山本 05 ~ 18 21:00 山本 「集計2(曜日毎で、火曜)」シート   A   B   C   D 01 火曜 02 03 6:00 佐藤 04 7:00 山本 05 ~ 18 21:00 山本 できれば、名前(シート)が非常にたくさんになる可能性があるので 集計2に出てくる名前は、詰めてが理想です。 また、できればあまり都度の細かい作業がなければありがたいです。 (利用者で、できない可能性が高い) よろしくお願い申し上げます。

  • EXCELマクロVBAについて

    Excel2007、XPを使用しています。 AからE列に下記のような情報が入力されています。 A / B / C / D / E ID / 名前 / 住所 / 電話 / 注文日 11111 / 田中 / 東京都 / 00000000000 / 2012/08/10 11111 / 田中 / 東京都 / 00000000000 / 2012/08/09 11111 / 田中 / 東京都 / 00000000000 / 2012/08/18 11112 / 佐藤 / 京都府 / 00000000000 / 2012/08/10 11113 / 鈴木 / 北海道 / 00000000000 / 2012/08/11 11113 / 鈴木 / 北海道 / 00000000000 / 2012/08/15 A列のIDでくくったとして、 E列の注文日が最大のみの行を表示させたいです。 A / B / C / D / E ID / 名前 / 住所 / 電話 / 注文日 11111 / 田中 / 東京都 / 00000000000 / 2012/08/18 11112 / 佐藤 / 京都府 / 00000000000 / 2012/08/10 11113 / 鈴木 / 北海道 / 00000000000 / 2012/08/15 このようなことはマクロで可能なのでしょうか? 恐れ入りますがご教授お願い致します。