
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルVBAで教えて頂きたいのですが? 2 2022/12/31 20:28
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) ユーザーフォームに2つのコンボボックス銀行名「ConboBox1」支店名を「ConboBox2」とし 4 2022/08/03 17:34
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【VBA】 結合セルに複数画像と...
-
【マクロ】シートの変数へ入れ...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
Vba Array関数について教えてく...
-
vbsでのwebフォームへの入力制限?
-
VBAでユーザーフォームを指定回...
-
【ExcelVBA】5万行以上のデー...
-
[VB.net] ボタン(Flat)のEnable...
-
Vba セルの4辺について罫線が有...
-
エクセルのマクロについて教え...
-
Excel VBA 選択範囲の罫線色の...
-
【マクロ】並び替えの範囲が、...
-
【マクロ】開いているブックの...
-
vb.net(vs2022)のtextboxのデザ...
-
エクセルのVBAコードと数式につ...
-
改行文字「vbCrLf」とは
-
エクセルの改行について
-
算術演算子「¥」の意味について
-
Excelのマクロについて教えてく...
-
【ExcelVBA】dictionaryの重複...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Vba セルの4辺について罫線が有...
-
vbsでのwebフォームへの入力制限?
-
【ExcelVBA】5万行以上のデー...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
【マクロ】開いているブックの...
-
【マクロ】並び替えの範囲が、...
-
エクセルの改行について
-
エクセルのマクロについて教え...
-
vb.net(vs2022)のtextboxのデザ...
-
VBAでCOPYを繰り返すと、処理が...
-
VBA ユーザーフォーム ボタンク...
-
エクセルのVBAコードと数式につ...
-
エクセルのVBAコードについて教...
-
[VB.net] ボタン(Flat)のEnable...
-
【マクロ】変数を使った、文字...
-
改行文字「vbCrLf」とは
-
質問58753 このコードでうまく...
-
【マクロ】シートの変数へ入れ...
-
ワードの図形にマクロを登録で...
-
算術演算子「¥」の意味について
おすすめ情報
sheet1の画像です。