エクセルシート間で照合をしたいと思っています。
照合する項目は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万件を超えています。
どなたかアドバイスいただければと思います。よろしくお願いします。
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
この回答への補足
回答をいただきありがとうございます。
追加で質問なんですが、もってくる列がA列だけでなくほかにもある場合にはどのようにしたらいいでしょうか。
No.4
- 回答日時:
再びレスありがとうございます。
では 以下の2点をチェックしてみていただけますか?
(1)スクリプト上の、すべての「Sheet1」が「前年度」に、「Sheet2」が「新年度」に、それぞれ もれなく変更されているかどうか
(2)変更するときに、すぐ前の「(」(カッコ)や、すぐ後ろの「.」(ピリオド)を誤って削除していないか
…よろしくお願いいたします。
この回答への補足
お返事ありがとうございます。
「sheet1」を「Sheets("前年度")」にすることで、うまくいきました。
本当にありがとうございます。が、データ量が多いせいか、途中でフリーズしてしまいます。CPUの使用率が100%になってしまうんです。
データが削ってマクロを実行させると完璧なんですが無理があるんでしょうか?
データ量は13.1MB 件数は各シートに13000件です。
何度も回答をいただきありがとうございます。
フリーズではなく時間がかかっていただけでした。待っていれば完璧な動作をしてくれました。
おかげさまで、何日もかかっていた作業が短時間でこなすことができます。
本当にありがとうございました。
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です。
この回答への補足
お返事ありがとうございます。
教えていただいた式をコピペしてシートの名前を変更したところ最初のところでとまってしまいます。なぜでしょう?
サンプルをつくてシート名を変更せず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列も見つつ判定しなければいけませんが。
この回答への補足
回答をいただきありがとうございます。マクロわからないので、関数でと思っていましたが、月曜日に職場でやってみます。
それでC列には同じデータがありますが、A列に入っているデータも同じなんですが。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) EXCEL 関数を教えてください。(A列の同じ値が複数ある場合vlookupで出来ますか) 4 2022/12/07 20:54
- Excel(エクセル) エクセルの複数ブックのシートを1つまとめたい 都道府県ごとに47ブックがあり、そのシートのデータを1 5 2022/11/15 14:57
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- Excel(エクセル) エクセルの条件付き書式 個人シートを参照して集計シートに色付けしたい 1 2023/06/22 00:39
- Visual Basic(VBA) VBAで、1つのエクセルで、2つのシートからもう1つのシートに条件のある転記コードを教えてください。 1 2023/03/16 18:07
- Excel(エクセル) エクセルのマクロを教えてください。 2 2022/03/28 13:14
- Excel(エクセル) 【エクセル」 特定のセルで条件抽出した列を、別シートに上から詰めて表示したい。 8 2022/04/08 16:00
- Visual Basic(VBA) エクセルのマクロで対象ごとにシート分けしてその内容をセルに書き込みたい 9 2022/08/24 13:23
- Visual Basic(VBA) 2つのシートの任意のセルの番号が一致したら、一致した行をコピーする VBA 2 2023/06/19 20:48
- Excel(エクセル) VBA セルの値と同じ名前のシートにデータを貼り付けするやり方を教えてください 2 2022/05/17 16:26
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの保護で、列の表示や...
-
文字の色も参照 VLOOKUP
-
ExcelのVlookup関数の制限について
-
エクセルの列の限界は255列以上...
-
VBAで繰り返しコピーしながら下...
-
スプレッドシートでindexとIMPO...
-
VLOOKアップ関数の結果の...
-
Excel の複数シートの列幅を同...
-
SUMPRODUCTにて別シートのデー...
-
エクセル マクロ 標準モジュー...
-
エクセルの複数シートにあるデ...
-
エクセルで、book全体の検索&...
-
オートフィルタ使用時にCOUNTIF...
-
【VBA】ピボットテーブルを既存...
-
【条件付き書式】countifsで複...
-
エクセル 日報売上を月報に展開...
-
【VBA】複数のシートの指定した...
-
EXCEL VBAのコンボボックスに取...
-
エクセルで横並びの複数データ...
-
Excel VBA ピボットテーブルに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelのVlookup関数の制限について
-
文字の色も参照 VLOOKUP
-
オートフィルタ使用時にCOUNTIF...
-
エクセルの保護で、列の表示や...
-
VBAで繰り返しコピーしながら下...
-
エクセル関数に詳しい方、教え...
-
【条件付き書式】countifsで複...
-
Excel の複数シートの列幅を同...
-
エクセル マクロ 標準モジュー...
-
エクセルで横並びの複数データ...
-
エクセルの列の限界は255列以上...
-
Excelでの並べ替えを全シートま...
-
VLOOKアップ関数の結果の...
-
SUMPRODUCTにて別シートのデー...
-
エクセルで、チェックボックス...
-
Excel VBA ピボットテーブルに...
-
【エクセル】1列のデータを交...
-
エクセルVBAで、ある文字を含ん...
-
エクセルのブック分割マクロを...
-
excel 複数のシートの同じ場所...
おすすめ情報