Доброго времени суток.
Нужна помощь на форуме нашёл тему, но ввиду начинающего опыта в вба не могу до конца понять как написать макрос.
Задача стоит такая:
Во вложенном файле два листа, на листе "текущие" значения с которыми работаем, на листе "новые" значения, которые добавляются и могут содержать значения, которые уже есть на листе "текущие".
Чтобы не использовать формулу ИНДЕКС(ПОИСКПОЗ) так как значений очень много и процесс занимает долгое время, а использовать макрос vba с массивом и справочником.
Нужно на листе "новые" добавить ячейку и по 4 условиям отобразить какие уже есть на листе "текущие", чтобы взять только новые значения.
Нужна помощь на форуме нашёл тему, но ввиду начинающего опыта в вба не могу до конца понять как написать макрос.
Задача стоит такая:
Во вложенном файле два листа, на листе "текущие" значения с которыми работаем, на листе "новые" значения, которые добавляются и могут содержать значения, которые уже есть на листе "текущие".
Чтобы не использовать формулу ИНДЕКС(ПОИСКПОЗ) так как значений очень много и процесс занимает долгое время, а использовать макрос vba с массивом и справочником.
Нужно на листе "новые" добавить ячейку и по 4 условиям отобразить какие уже есть на листе "текущие", чтобы взять только новые значения.
Код |
---|
Sub новые_решения() Dim a(), b(), с(), d() , lLastrow As Long, i As Long With Sheets("новые") lLastrow = .Cells(Rows.Count, 10).End(xlUp).Row a = Range(.[j2], .Range("C" & lLastrow)).Value ReDim aa(1 To UBound(a), 1 To 1) End With With Sheets("текущие") lLastrow = .Cells(Rows.Count, 10).End(xlUp).Row b = Range(.[j2], .Range("J" & lLastrow)).Value c = Range(.[t2], .Range("T" & lLastrow)).Value End With With CreateObject("Scripting.Dictionary") .CompareMode = 1 For i = 1 To UBound(a): .Item(Trim(a(i, 1))) = i: Next For i = 1 To UBound(b) If .exists(Trim(b(i, 1))) Then aa(.Item(Trim(b(i, 1))), 1) = b(i, 1) End If Next End With Sheets("текущие").[I2].Resize(UBound(aa), 1) = aa End Sub |