Страницы: 1
RSS
Сравнение двух столбцов одной книги и подстановка значений с помощью VBA
 
Доброго времени суток, уважаемые специалисты!
По работе часто сталкиваюсь с необходимостью сравнения двух значительных по обьему массивов данных.
Так, у меня имеется файл с номерами заказов, в котором имеются два листа  "Заказы" и "Сверка".
В Листе "Заказы" имеются три столбца "Номер заказа", "Дата_1", "Дата_2". Столбец "Номер заказа" заполнен числовыми данными (не по порядку), а столбцы "Дата_1" и "Дата_2" пустые. Всего в этом листе содержится порядка 5000 строк.  
В листе "Сверка" также имеются аналогичные солбцы:  "Номер заказа", "Дата_1", "Дата_2". При этом все три столбца являются заполненными. Число строк в этом листе около 200.
Нужен скрипт, который бы сравнивал значения в столбце "Номер заказ" листа "Сверка", со значениями из одноименного столбца листа "Заказы", и при наличия совпадения копировал бы значения из соответствующих ячеек столбцов  "Дата_1" и "Дата_2" листа "Сверка" в ячейки столбцов  Дата_1" и "Дата_2" Листа "Заказы".
Отмечу также, что скрипт нужен из-за того что решение с помощью формул (например ВПР) сильно утяжеляют книгу, делая неудобной работу с ней.
Готовое решение по поиску не нашел
Использую Excel 2010.
 
За готовыми решениями ходют сюда:
http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=list&FID=7
Кто Вам мешает записать вставку ВПР, а потом замену формул на значения макрорекордером?
Я сам - дурнее всякого примера! ...
 
Вроде у Игоря есть готовый шаблон))
 
Да, есть. Но под такую задачу можно что-то попроще написать.
Но те, кто уже купил мой "шаблон" могут его тут использовать :)
 
Вы о CompareFiles.Find? Чет у меня и мысли на этот счет не мелькнуло  :D
Я сам - дурнее всякого примера! ...
 
У меня тоже не мелькнуло... Но Юрий навёл :)
 
Старый стал - меняй мелькалку ))
 
Вот попроще. И бесплатно :)
Код
Sub tt()
    Dim a(), b(), i&, ii&

    With CreateObject("scripting.dictionary")
        a = Sheets(2).[a1].CurrentRegion.Value
        For i = 2 To UBound(a): .Item(a(i, 1)) = i: Next
        b = Sheets(1).[a1].CurrentRegion.Value
        For i = 2 To UBound(b)
            If .exists(b(i, 1)) Then
            ii = .Item(b(i, 1))
            b(i, 2) = a(ii, 2)
            b(i, 3) = a(ii, 3)
            End If
        Next
        Sheets(1).[a1].CurrentRegion.Value = b
    End With

End Sub
 
А как вставлять в конец столбца значения, которые не были найдены?
Страницы: 1
Читают тему
Наверх