アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセルシート間で照合をしたいと思っています。
照合する項目は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万件を超えています。

どなたかアドバイスいただければと思います。よろしくお願いします。     

A 回答 (4件)

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

この回答への補足

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

補足日時:2007/01/27 22:07
    • good
    • 0

再びレスありがとうございます。



では 以下の2点をチェックしてみていただけますか?

(1)スクリプト上の、すべての「Sheet1」が「前年度」に、「Sheet2」が「新年度」に、それぞれ もれなく変更されているかどうか

(2)変更するときに、すぐ前の「(」(カッコ)や、すぐ後ろの「.」(ピリオド)を誤って削除していないか

…よろしくお願いいたします。

この回答への補足

お返事ありがとうございます。

「sheet1」を「Sheets("前年度")」にすることで、うまくいきました。
本当にありがとうございます。が、データ量が多いせいか、途中でフリーズしてしまいます。CPUの使用率が100%になってしまうんです。

データが削ってマクロを実行させると完璧なんですが無理があるんでしょうか?
データ量は13.1MB 件数は各シートに13000件です。

補足日時:2007/01/30 21:03
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/02/03 20:52

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です。

この回答への補足

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

補足日時:2007/01/29 14:45
    • good
    • 0

マクロを使うか、シートをソートすればいいのでは?



件数が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列も見つつ判定しなければいけませんが。

この回答への補足

回答をいただきありがとうございます。マクロわからないので、関数でと思っていましたが、月曜日に職場でやってみます。

それでC列には同じデータがありますが、A列に入っているデータも同じなんですが。

補足日時:2007/01/27 09:37
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!