Я подготовил код, основанный на том, что я могу вывести из вашего вопроса и комментариев. Итак, код копирует, как можно быстрее (с использованием массива) содержимое cashbook.Sheets(1)
в newbankstmt.Range("W1")
.
, затем он перебирает между 100 строками и, если "B" ячейка Date по указанному c строка равна дате ячейки "W" в той же строке, тогда адрес ярости "A: W" соответствующей строки возвращается в Immediate Window, и код останавливается. Вы можете go перейти к следующему такому событию, нажав F5. Чтобы увидеть возвращенное значение в Immediate Window, вы должны нажать Ctrl + G.
Если это то, что вам нужно, пожалуйста, подтвердите, и я покажу вам, как эти диапазоны можно также загрузить в другой массив и вставить сразу на новом листе, или где вам нужно, если четко объясните, где ...
Этот код не заботится о формате ячейки (даты). Но код будет работать только в том случае, если обе обсуждаемые ячейки (B и W) имеют тип даты .
Sub runThrough(cbpath As String, bspath As String)
Dim newcashBook As Worksheet, newbankstmt As Worksheet
Dim cashbook As Workbook, Bankstmt As Workbook
Dim i As Long, dateB As Date, dateW As Date, arrC As Variant
Set cashbook = Workbooks.Open(cbpath)
'copy data from cashbook:
Set newcashBook = cashbook.Sheets(1)
'input the big range in arrC array:
arrC = newcashBook.Range("A1:Z1048576").value
cashbook.Close
'copy the arrC content starting from W1:
Set newbankstmt = ThisWorkbook.Sheets("Sheet0")
newbankstmt.Range("W1").Resize(UBound(arrC, 1), UBound(arrC, 2)).value = arrC
For i = 2 To 100 'why To 100?
dateB = newbankstm.Cells(i, "B").value
dateW = newbankstm.Cells(i, "W").value
If DateSerial(Year(dateB), Month(dateB), Day(dateB)) = DateSerial(Year(dateW), Month(dateW), Day(dateW)) Then
Debug.Print "Range to be copied: " & newbankstm.Range(newbankstm.Cells(i, 1), _
newbankstm.Cells(i, "W")).Address
Stop
End If
Next i
End Sub