Копирование диапазона из двух книг в одну с двумя условиями - 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
Листинг программы
  1. Sub Слияние_диапазонов2()
  2.     Dim i&, k&, j&, A, B, Dic, Ra
  3.     Dim StIst1:  StIst1 = Array(4, 5, 8, 9, 10, 11, 12, 13, 14, 18, 19) ' Из komus_opt_ret_3.xlsx"
  4.    Dim StCel:        StCel = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13)
  5.     Dim StIst2:                                          StIst2 = Array(5, 6) 'Из этой книги
  6.    Set Dic = CreateObject("Scripting.Dictionary")
  7.     A = Workbooks("komus_opt_ret_3").Sheets("Опт прайс-лист").UsedRange.Value
  8.     B = ThisWorkbook.Sheets("komus-price-msk").UsedRange.Value
  9.     Workbooks.Add
  10.     Application.ScreenUpdating = False
  11.     For i = 1 To UBound(B)
  12.         If B(i, 3) <> "" Then Dic(B(i, 3)) = i
  13.     Next i
  14.     For i = 3 To UBound(A)
  15.         If Trim(A(i, 4)) & Trim(A(i, 5)) = "" Then A(i, 4) = A(i, 1)
  16.         For j = 0 To UBound(StIst1)
  17.             Cells(i - 2, StCel(j)) = A(i, StIst1(j))
  18.         Next j
  19.         If Dic.Exists(A(i, 4)) Or i = 1 Then
  20.             If i = 1 Then
  21.                 k = 1
  22.             Else
  23.                 k = Dic(A(i, 4))
  24.                 Cells(i - 2, 2).Interior.color = vbYellow
  25.             End If
  26.             For j = 0 To UBound(StIst2)
  27.                 Cells(i - 2, StCel(11 + j)) = B(k, StIst2(j))
  28.             Next j
  29.         End If
  30.         With Cells(i - 2, 1).Resize(1, 13)
  31.             .Interior.color = Workbooks("komus_opt_ret_3").Sheets("Опт прайс-лист").Cells(i, 1).Interior.color
  32.             .Borders.LineStyle = xlContinuous
  33.             .Offset(, 1).NumberFormat = "#,##0.00"
  34.             If LCase(Trim(A(i, 13))) = "нет" Then .Interior.color = vbRed
  35.         End With
  36.         Cells(i - 2, 11).NumberFormat = "#"
  37.     Next i
  38.     Set Dic = Nothing
  39. End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.667 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы