Копирование диапазона из двух книг в одну с двумя условиями - 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

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


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

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

6   голосов , оценка 4.667 из 5
Похожие ответы