|    | 
     ▼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 
 
 | 
     
    
   |