• ベストアンサー

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

エクセルシート間で照合をしたいと思っています。 照合する項目は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列に入っているデータも同じなんですが。