Есть макрос на сверку адресов в разных документах. Например из первого документа сравнивает есть ли эти адреса во втором документе. Из 333 адресов, 23 адреса он говорит, что не смог найти. Проверял, адреса записаны одинаково. В макросе поставил проверять конкретно один из этих не найденных адресов он его нашел в другом документе а в общем поиске не находит. В чем может быть проблема?
[vba]
Код
Sub Сверка_Адресов() Dim WB1 As Workbook Dim WB2 As Workbook Dim Path2 As String Dim i&, j&, s&, m 'Прописываем путь второго файла (вместе с именем файла и расширением) Path2 = "бла бла бла.xls" 'Определяем что WB1 - книга из которой вы запустили макрос Set WB1 = ActiveWorkbook Workbooks.Open (Path2) 'Определяем что WB2 - книга, которую вы только что открыли Set WB2 = ActiveWorkbook s = 0 m = 0 For i = 7 To 339 'Range("B" & Rows.Count).End(xlUp).Row For j = 8 To 318 If WB1.Worksheets(1).Cells(i, 2) = WB2.Worksheets(3).Cells(j, 2) Then 'If Cells(i, 2) <> Empty Then s = s + 1 GoTo NextI End If Next j MsgBox (WB1.Worksheets(1).Cells(i, 2)) m = m + 1 NextI: Next i MsgBox ("Совпавших адресов " & s & " Не совпавших " & m)
End Sub
[/vba]
Есть макрос на сверку адресов в разных документах. Например из первого документа сравнивает есть ли эти адреса во втором документе. Из 333 адресов, 23 адреса он говорит, что не смог найти. Проверял, адреса записаны одинаково. В макросе поставил проверять конкретно один из этих не найденных адресов он его нашел в другом документе а в общем поиске не находит. В чем может быть проблема?
[vba]
Код
Sub Сверка_Адресов() Dim WB1 As Workbook Dim WB2 As Workbook Dim Path2 As String Dim i&, j&, s&, m 'Прописываем путь второго файла (вместе с именем файла и расширением) Path2 = "бла бла бла.xls" 'Определяем что WB1 - книга из которой вы запустили макрос Set WB1 = ActiveWorkbook Workbooks.Open (Path2) 'Определяем что WB2 - книга, которую вы только что открыли Set WB2 = ActiveWorkbook s = 0 m = 0 For i = 7 To 339 'Range("B" & Rows.Count).End(xlUp).Row For j = 8 To 318 If WB1.Worksheets(1).Cells(i, 2) = WB2.Worksheets(3).Cells(j, 2) Then 'If Cells(i, 2) <> Empty Then s = s + 1 GoTo NextI End If Next j MsgBox (WB1.Worksheets(1).Cells(i, 2)) m = m + 1 NextI: Next i MsgBox ("Совпавших адресов " & s & " Не совпавших " & m)
Дико извиняюсь за свою не внимательность (просто очень торопился дописать макрос). Спасибо, что помогли и ткнули меня носом.
Значит сам макрос написан правильно.
Можно сразу еще спрошу чтоб не размножать мелких тем, как в цыкле указать конечное значения For не конкретным числом а чтоб перебирало до тех пор пока есть строки, по i и по j ? i это строка в документе из которого сравниваются адреса а j это строка в документе в котором сравниваются адреса. Грубо говоря i ищет в j.
Дико извиняюсь за свою не внимательность (просто очень торопился дописать макрос). Спасибо, что помогли и ткнули меня носом.
Значит сам макрос написан правильно.
Можно сразу еще спрошу чтоб не размножать мелких тем, как в цыкле указать конечное значения For не конкретным числом а чтоб перебирало до тех пор пока есть строки, по i и по j ? i это строка в документе из которого сравниваются адреса а j это строка в документе в котором сравниваются адреса. Грубо говоря i ищет в j.eIIIkuHkoT
Сообщение отредактировал eIIIkuHkoT - Четверг, 17.12.2015, 10:44
Kuzmich, еще вариант с функцией листа CountIf [vba]
Код
Sub Сверка_Адресов() Dim WB1 As Workbook Dim WB2 As Workbook Dim Path2 As String Dim i&, j&, s&, m 'Прописываем путь второго файла (вместе с именем файла и расширением) Path2 = "бла бла бла.xls" 'Определяем что WB1 - книга из которой вы запустили макрос Set WB1 = ActiveWorkbook Set WB2 = Workbooks.Open(Path2) 'Определяем что WB2 - книга, которую вы только что открыли With WB1.Sheets(1) lr1 = .Cells(.Rows.Count, 2).End(xlUp).Row End With s = 0: m = 0 For i = 7 To lr1 If WorksheetFunction.CountIf(WB2.Worksheets(3).Range("b:b"), WB1.Worksheets(1).Cells(i, 2)) Then s = s + 1 Else m = m + 1 End If Next i MsgBox ("Совпавших адресов " & s & " Не совпавших " & m) End Sub
[/vba]
Kuzmich, еще вариант с функцией листа CountIf [vba]
Код
Sub Сверка_Адресов() Dim WB1 As Workbook Dim WB2 As Workbook Dim Path2 As String Dim i&, j&, s&, m 'Прописываем путь второго файла (вместе с именем файла и расширением) Path2 = "бла бла бла.xls" 'Определяем что WB1 - книга из которой вы запустили макрос Set WB1 = ActiveWorkbook Set WB2 = Workbooks.Open(Path2) 'Определяем что WB2 - книга, которую вы только что открыли With WB1.Sheets(1) lr1 = .Cells(.Rows.Count, 2).End(xlUp).Row End With s = 0: m = 0 For i = 7 To lr1 If WorksheetFunction.CountIf(WB2.Worksheets(3).Range("b:b"), WB1.Worksheets(1).Cells(i, 2)) Then s = s + 1 Else m = m + 1 End If Next i MsgBox ("Совпавших адресов " & s & " Не совпавших " & m) End Sub