
Sheet1に現在のの会員情報Sheet2に新規の申し込みの会員情報があります。
Sheet1のB列の氏名とSheet2のG列の氏名を照合して一致するものをSheet1の右側に必要な事項を転記したい。Sheet1に2000件ほどSheet2に1000件ほどのデータがあります。
添付のvbaで一応結果が得られますが3分弱の時間がかかってしまいます。
早く処理できる方法をご教示ください。
Sub 全体重複確認
Dim i As Long, n As Long, j As Long, C As Range, wS1 As Worksheet, wS2 As Worksheet
Set wS1 = Worksheets("Sheet1")
Set wS2 = Worksheets("Sheet2")
j = wS1.Cells(Rows.Count, 2).End(xlUp).Row
For i = 2 To wS1.Cells(Rows.Count, 2).End(xlUp).Row
Set C = wS2.Columns(7).Find(what:=wS1.Cells(i, 2), LookIn:=xlValues, lookat:=xlWhole)
If Not C Is Nothing Then
n = C.Row
wS1.Cells(i, 7).Value = wS2.Cells(n, 1).Value
wS1.Cells(i, 8).Value = wS2.Cells(n, 7).Value
wS1.Cells(i, 9).Value = wS2.Cells(n, 12).Value
wS1.Cells(i, 10).Resize(1, 2).Value = wS2.Cells(n, 15).Resize(1, 2).Value
wS1.Cells(i, 12).Value = wS2.Cells(n, 10).Value
End If
Next i
MsgBox "重複確認しました" & vbCrLf & "OKで重複分だけを表示します。"
Worksheets("Sheet1").Select
ActiveSheet.Range("$A$1:$J$" & j).AutoFilter Field:=8, Criteria1:="<>"
End Sub
No.4
- 回答日時:
とりあえず、速くなるようにしました。
Sheet2は2行目からデータが開始していること。
Sheet2の最大行はG列できまること
Sheet2のG列に空白はないこと
が前提です。
Sub 全体重複確認()
Dim i As Long, n As Long, j As Long, C As Range, wS1 As Worksheet, wS2 As Worksheet
Dim maxrow2 As Long
Dim key As Variant
Dim row2 As Long
Dim dicT As Object
Set dicT = CreateObject("Scripting.Dictionary") ' 連想配列の定義
Set wS1 = Worksheets("Sheet1")
Set wS2 = Worksheets("Sheet2")
j = wS1.Cells(Rows.Count, 2).End(xlUp).Row
maxrow2 = wS2.Cells(Rows.Count, 7).End(xlUp).Row
For row2 = 2 To maxrow2
key = wS2.Cells(row2, 7).Value
dicT(key) = row2
Next
For i = 2 To wS1.Cells(Rows.Count, 2).End(xlUp).Row
key = wS1.Cells(i, 2).Value
If dicT.exists(key) = True Then
n = dicT(key)
wS1.Cells(i, 7).Value = wS2.Cells(n, 1).Value
wS1.Cells(i, 8).Value = wS2.Cells(n, 7).Value
wS1.Cells(i, 9).Value = wS2.Cells(n, 12).Value
wS1.Cells(i, 10).Resize(1, 2).Value = wS2.Cells(n, 15).Resize(1, 2).Value
wS1.Cells(i, 12).Value = wS2.Cells(n, 10).Value
End If
Next i
MsgBox "重複確認しました" & vbCrLf & "OKで重複分だけを表示します。"
Worksheets("Sheet1").Select
ActiveSheet.Range("$A$1:$J$" & j).AutoFilter Field:=8, Criteria1:="<>"
End Sub
No.3
- 回答日時:
こんにちは
VBAで時間がかかるのは、セルへのアクセス(=読み/書き)です。
これを改善するには、できるだけメモリ上に値を保持して、そちらで処理を行い、まとめて結果を出力する(=シートに記入する)方法に変えることです。
セルの読み取り/書き込みは個別に行わずに、まとめて(=セル範囲で)行うことで、速度は向上します。
ただし、シート全部をメモリに取り込むのはあまりにも非効率ですから、どの部分を対象にするかを考慮する必要があるでしょう。
また、(私は確かめていませんが)FINDメソッドは、何度も繰り返すと遅いという情報があります。
https://officedic.com/excel-vba-highspeed-find/
基本的に、上記の点を改善なさることで、それなりの速度向上が見込めると思います。
その上で、(既回答にもありますが)速度向上のためによく利用される
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
などを設定しておくことで、もう少しだけ速くできるものと思います。

No.2
- 回答日時:
シート2の1件毎にシート1を全件サーチしてチェックしてるからです。
Findで探してるでしょ?
件数が多い基幹業有無ではマッチングマージが鉄則です。
キー項目で両シートを並べ替えて、マッチングマージ。
やり方は検索して下さい。
数百万件もある訳じゃないから、3分くらいならそれで良いと思いますが。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
電子書籍プレゼントキャンペーン!
最大2万円超分当たる!マンガや小説が読める電子書籍サービス『Renta!』で利用できるギフトコードプレゼント実施中!
-
配列の勉強をしています。使用する変数の意味、検索条件の書き方が難しいです。
Visual Basic(VBA)
-
Excel VBA 大量のレコードからある列の重複数をカウントする方法?拡張編
Visual Basic(VBA)
-
VBAでエクセルをtxtに変換するとエクセルでカンマを含む文字数字がtxtでは「"」付にならないよ
Visual Basic(VBA)
-
4
プログラミングについて
その他(プログラミング・Web制作)
-
5
マクロのコードを、少しでも削って短くしたい
Excel(エクセル)
-
6
【マクロ】フォルダにファイルが1つも無い時に、ファイルがありませんとメッセージを表示する
Visual Basic(VBA)
-
7
マクロを簡潔にしたい
Excel(エクセル)
-
8
VBAでのフルパスの取得
Visual Basic(VBA)
-
9
【至急】 当方初心者です。 マクロについて知恵をお貸しください。 ★したい動作 ①リストE列2行目か
Visual Basic(VBA)
-
10
VBAでのMATCH関数
Visual Basic(VBA)
-
11
Excel vbaについて知恵もしくは、コード教えて下さいm(__)m ① 表にあるデータをコピー、
Visual Basic(VBA)
-
12
データを製品別に集計
Visual Basic(VBA)
-
13
モードレスでユーザーフォームが開け(表示)ません。
Visual Basic(VBA)
-
14
ExcelのVBAでシフト表を作っていますが、バグが出て困っています
Visual Basic(VBA)
-
15
動かなくなってしまった古いVBAを動くようにしたい
Visual Basic(VBA)
-
16
追記する列を増やしたい 2つのデータを検索・照合して元データにないデータを下記マクロで商品名を追記し
Visual Basic(VBA)
-
17
VBAでfunctionを利用しようとしたときに「引数は省略できません」というエラーが出ます
Visual Basic(VBA)
-
18
初めてマクロを入力しますが、テキストとおりに入力したのに構文エラーです。修正を教えてください。
Visual Basic(VBA)
-
19
エクセルVBA コードが同じでもファイルによって処理速度が大きく変わるのはなぜ
Visual Basic(VBA)
-
20
Excel VBAでAA(BBB) → BBB.AA に置換したい
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
このカテゴリの人気Q&Aランキング
-
4
Excel VBA 複数選択したリスト...
-
5
数式が消える
-
6
【Excel VBA】条件に合った行の...
-
7
VBA 重複チェック後に値をワー...
-
8
VBAを使いシート間で貼り付け
-
9
エクセルのエラーメッセージ「4...
-
10
EXCEL VBAにて動的にCheckBOXを...
-
11
特定のPCだけ動作しないVBAマク...
-
12
paintに貼り付けてある画像の大...
-
13
VBAで、1つのエクセルで、2つの...
-
14
ユーザーフォーム「frm_基本❶」...
-
15
Excel VBA オブジェクトマクロ ...
-
16
VBA 変数名に変数を使用したい。
-
17
ExcelVBAを使って、値...
-
18
Application.ScreenUpdating = ...
-
19
同じ作業を複数のシートに実行...
-
20
VBAでループ内で使う変数名を可...
おすすめ情報
公式facebook
公式twitter
sheet1の画像です。