Копирование диапазона из двух книг в одну с двумя условиями - VBA
Формулировка задачи:
Здравствуйте. Хочу попросить вас о помощи, в доработке макроса.
Задача состоит в том, что есть 2 книги источника komus_opt_ret_3 и komus-price-msk, в komus-price-msk нужно создать макрос,который копирует столбцы из двух книг в новую и выполняет определённые условия. То есть из этих двух книг столбцы, которые выделены красным нужно скопировать в новую книгу, но перед этим должны срабатывать 2 условия:
1.Если товар с артикулом из прайс-листа komus-price-msk совпадает с артикулом komus_opt_ret_3, тогда добавляем цены( цена,руб, цена в ИМ) в новую книгу и в столбике "наименование" название товара выделить жёлтым, если артикул не совпадает то, не выделять и оставить ячейки с ценой пустыми;
2.Если в komus_opt_ret_3 наличие на складе слово "нет", тогда вся строка в новой книге выделяется красным.
Проблема в том, что копируется диапазон в новую книгу не совсем правильно, без разделов и два столбика из komus-price-msk при добавлении в новую книгу съезжают вверх. Второе условие со складом работает, как надо. Но первое нет, не ищет одинаковые артикулы и не выделяет жёлтым при добавлении. Оба прайс-листа должны быть открыты, для работы макроса.
Помогите разобраться с задачей, пожалуйста.
Ребят не смог сюда загрузить задачу, поэтому ссылка на её архивhttp://rgho.st/7LkvDfLdQ
Решение задачи: «Копирование диапазона из двух книг в одну с двумя условиями»
textual
Листинг программы
Sub Слияние_диапазонов2() Dim i&, k&, j&, A, B, Dic, Ra Dim StIst1: StIst1 = Array(4, 5, 8, 9, 10, 11, 12, 13, 14, 18, 19) ' Из komus_opt_ret_3.xlsx" Dim StCel: StCel = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13) Dim StIst2: StIst2 = Array(5, 6) 'Из этой книги Set Dic = CreateObject("Scripting.Dictionary") A = Workbooks("komus_opt_ret_3").Sheets("Опт прайс-лист").UsedRange.Value B = ThisWorkbook.Sheets("komus-price-msk").UsedRange.Value Workbooks.Add Application.ScreenUpdating = False For i = 1 To UBound(B) If B(i, 3) <> "" Then Dic(B(i, 3)) = i Next i For i = 3 To UBound(A) If Trim(A(i, 4)) & Trim(A(i, 5)) = "" Then A(i, 4) = A(i, 1) For j = 0 To UBound(StIst1) Cells(i - 2, StCel(j)) = A(i, StIst1(j)) Next j If Dic.Exists(A(i, 4)) Or i = 1 Then If i = 1 Then k = 1 Else k = Dic(A(i, 4)) Cells(i - 2, 2).Interior.color = vbYellow End If For j = 0 To UBound(StIst2) Cells(i - 2, StCel(11 + j)) = B(k, StIst2(j)) Next j End If With Cells(i - 2, 1).Resize(1, 13) .Interior.color = Workbooks("komus_opt_ret_3").Sheets("Опт прайс-лист").Cells(i, 1).Interior.color .Borders.LineStyle = xlContinuous .Offset(, 1).NumberFormat = "#,##0.00" If LCase(Trim(A(i, 13))) = "нет" Then .Interior.color = vbRed End With Cells(i - 2, 11).NumberFormat = "#" Next i Set Dic = Nothing End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д