|
▼PePe さん:
>Findは次の段階で勉強したいと思います。
>とりあえず、この種のコードをどのように書けば良いかと苦慮しています。
ある値が、ある範囲にあるかをLoopで範囲内の個々のセルにアクセスして
比較していくのは ばかサーチといって コードが難しいし、なによりセル
アクセスが頻繁に発生するのっで重い処理になります。
Findメソッドのほうがまだましです。コードも(内側のLoopがない分)
簡単になります。
Sub Findてすと() '------ Bk2の値が Bk1にあるか Find で調べる
Dim i As Integer, k As Integer
Dim LstR1 As Long, LstR2 As Long
Dim Bk1 As Workbook, Bk2 As Workbook
Dim v '←◆追加
Dim r1 As Range '←◆追加
Dim r2 As Range '←◆追加
Dim c As Range '←◆追加
Set Bk1 = ThisWorkbook
Set Bk2 = Workbooks.Open(ThisWorkbook.Path & "\Book2.xlsx")
With Bk1.Worksheets("sheet1")
LstR1 = .Cells(Rows.Count, 1).End(xlUp).Row
Set r1 = .Range("A1:A" & LstR1)
LstR2 = Bk2.Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row
'Bk2シートA列をLoop
For Each r2 In Bk2.Sheets("Sheet1").Range("A1:A" & LstR2)
v = r2.Value
Set c = Nothing
'Bk2シートA列のあるセル値が、Bk1側にあるか調べる
Set c = r1.Find(v, LookIn:=xlFormulas, LookAt:=xlWhole)
'↓無かった時の処理
If c Is Nothing Then
LstR1 = LstR1 + 1
.Cells(LstR1, 1).Value = v
End If
Next r2
End With
Bk2.Close True
Bk1.Save
End Sub
|
|