Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Сравнение полей в разных документах - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Сравнение полей в разных документах (Макросы/Sub)
Сравнение полей в разных документах
eIIIkuHkoT Дата: Четверг, 17.12.2015, 08:13 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Есть макрос на сверку адресов в разных документах. Например из первого документа сравнивает есть ли эти адреса во втором документе. Из 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]
К сообщению приложен файл: 0029434.xlsx (14.9 Kb)


Сообщение отредактировал eIIIkuHkoT - Четверг, 17.12.2015, 08:14
 
Ответить
СообщениеЕсть макрос на сверку адресов в разных документах. Например из первого документа сравнивает есть ли эти адреса во втором документе. Из 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]

Автор - eIIIkuHkoT
Дата добавления - 17.12.2015 в 08:13
Manyasha Дата: Четверг, 17.12.2015, 09:46 | Сообщение № 2
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
eIIIkuHkoT, Вы ищите значения из второго столбика в первом, правильно?
Посмотрите формулу и УФ, у меня тоже 23 значения не находит.
К сообщению приложен файл: 0029434-1.xlsx (21.5 Kb)


ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеeIIIkuHkoT, Вы ищите значения из второго столбика в первом, правильно?
Посмотрите формулу и УФ, у меня тоже 23 значения не находит.

Автор - Manyasha
Дата добавления - 17.12.2015 в 09:46
eIIIkuHkoT Дата: Четверг, 17.12.2015, 10:40 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Дико извиняюсь за свою не внимательность (просто очень торопился дописать макрос). Спасибо, что помогли и ткнули меня носом.

Значит сам макрос написан правильно.

Можно сразу еще спрошу чтоб не размножать мелких тем, как в цыкле указать конечное значения For не конкретным числом а чтоб перебирало до тех пор пока есть строки, по i и по j ?
i это строка в документе из которого сравниваются адреса а j это строка в документе в котором сравниваются адреса. Грубо говоря i ищет в j.


Сообщение отредактировал eIIIkuHkoT - Четверг, 17.12.2015, 10:44
 
Ответить
СообщениеДико извиняюсь за свою не внимательность (просто очень торопился дописать макрос). Спасибо, что помогли и ткнули меня носом.

Значит сам макрос написан правильно.

Можно сразу еще спрошу чтоб не размножать мелких тем, как в цыкле указать конечное значения For не конкретным числом а чтоб перебирало до тех пор пока есть строки, по i и по j ?
i это строка в документе из которого сравниваются адреса а j это строка в документе в котором сравниваются адреса. Грубо говоря i ищет в j.

Автор - eIIIkuHkoT
Дата добавления - 17.12.2015 в 10:40
Kuzmich Дата: Четверг, 17.12.2015, 10:52 | Сообщение № 4
Группа: Проверенные
Ранг: Ветеран
Сообщений: 711
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
Посмотрите мой вариант с макросом Sravnenie
К сообщению приложен файл: eIIIkuHkoT_1.xls (77.5 Kb)
 
Ответить
СообщениеПосмотрите мой вариант с макросом Sravnenie

Автор - Kuzmich
Дата добавления - 17.12.2015 в 10:52
Manyasha Дата: Четверг, 17.12.2015, 11:20 | Сообщение № 5
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
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]


ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщение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]

Автор - Manyasha
Дата добавления - 17.12.2015 в 11:20
Kuzmich Дата: Четверг, 17.12.2015, 12:50 | Сообщение № 6
Группа: Проверенные
Ранг: Ветеран
Сообщений: 711
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
Manyasha
Можно сравнение еще сделать на Dictionary
 
Ответить
СообщениеManyasha
Можно сравнение еще сделать на Dictionary

Автор - Kuzmich
Дата добавления - 17.12.2015 в 12:50
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Сравнение полей в разных документах (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!