Макрос для переноса свойств по столбцам - VBA

Узнай цену своей работы

Формулировка задачи:

Добрый день! Имеется excel файл напечатанного ниже формата:

Столбец "A"

- артикул (служит идентификатором, повторяется для разных свойств);

Столбец "B"

- название свойства;

Столбец "С"

- описание свойства. Пример файла с повторяющимися артикулами для разных свойств:
  1. 299571

    LCD-дисплей: нет
  2. 488447 LCD-дисплей: нет
  3. 488445 LCD-дисплей: нет
  4. 488444 LCD-дисплей: нет
  5. 253331 LCD-дисплей: нет
  6. 488446 LCD-дисплей: нет
  7. 336157 LCD-дисплей: нет
  8. 466206 LCD-дисплей: нет
  9. 120312 LCD-дисплей: нет
  10. 451045 LCD-дисплей: нет
  11. 471524 LCD-дисплей: нет
  12. 491343 LCD-дисплей: да
  13. 471522 LCD-дисплей: нет
  14. 299571

    Страна: Франция
  15. 488447 Страна: Франция
  16. 488445 Страна: Португалия
  17. 488444 Страна: Швейцария
  18. 253331 Страна: Португалия
  19. 488446 Страна: Румыния
  20. 336157 Страна: Румыния
  21. 466206 Страна: Румыния
  22. 120312 Страна: Румыния
  23. 451045 Страна: Румыния
  24. 471524 Страна: Румыния
  25. 491343 Страна: Италия
  26. 471522 Страна: Румыния
Напечатайте пожалуйста макрос, который проверит все ячейки: 1. Из

столбца "B"

оставит только уникальные значения, - которые будут размещаться по порядку на первой строке, начиная со

столбца "B"

, продолжая

столбцом "C"

,

столбцом "D"

и так далее в зависимости от количества найденных уникальных

названий свойств

; 2. В

столбце "A"

начиная со второй строки будут размещаться

артикула

; 3. Начиная со

столбца "B"

и до последнего существующего, и начиная со второй ячейки до последней существующей, будут размещаться описания свойств, - размещение которых зависит от размещения

артикула

. Пример необходимого результат, напечатан ниже:
  1. Артикул: LCD-дисплей: Страна:
  2. 299571

    нет
  3. 488447 нет
  4. 488445 нет
  5. 488444 нет
  6. 253331 нет
  7. 488446 нет
  8. 336157 нет
  9. 466206 нет
  10. 120312 нет
  11. 451045 нет
  12. 471524 нет
  13. 491343 да
  14. 471522 нет
  15. 299571

    Франция
  16. 488447 Франция
  17. 488445 Португалия
  18. 488444 Швейцария
  19. 253331 Португалия
  20. 488446 Румыния
  21. 336157 Румыния
  22. 466206 Румыния
  23. 120312 Румыния
  24. 451045 Румыния
  25. 471524 Румыния
  26. 491343 Италия
  27. 471522 Румыния

Решение задачи: «Макрос для переноса свойств по столбцам»

textual
Листинг программы
Sub Заполнение_свойств()
    Dim i&, j&, k&, LastCol&, Ar, B, Dic1, Dic2, Dic3, vX, S$
    Ar = Worksheets(1).[A1].CurrentRegion.Value
    Set Dic1 = CreateObject("Scripting.Dictionary"): Dic1.CompareMode = 1
    Set Dic2 = CreateObject("Scripting.Dictionary"): Dic2.CompareMode = 1
    Set Dic3 = CreateObject("Scripting.Dictionary"): Dic3.CompareMode = 1
    For i = 1 To UBound(Ar)
        If IsNumeric(Ar(i, 1)) Then Ar(i, 1) = format$(Ar(i, 1))
        S = Ar(i, 1) & Ar(i, 2)
        Dic1(S) = Ar(i, 3)
        Dic2(Ar(i, 1)) = 0&
        Dic3(Ar(i, 2)) = 0&
    Next i
    With Worksheets(2)
        .UsedRange.ClearContents
        i = 1
        For Each vX In Dic2.Keys
            i = i + 1
            .Cells(i, 1) = vX
        Next
        .[A1] = "Артикул:"
        B = .Range("A2:A" & i).Value
        j = 1
        For Each vX In Dic3.Keys
            j = j + 1
            .Cells(1, j) = vX
        Next
        LastCol = j
        i = 1
        For j = 2 To LastCol
            For k = 1 To UBound(B)
                i = i + 1
                .Cells(i, 1) = B(k, 1)
                If IsNumeric(B(k, 1)) Then S = format$(B(k, 1)) Else S = B(k, 1)
                S = S & .Cells(1, j)
                If Dic1.Exists(S) Then .Cells(i, j) = Dic1(S)
            Next
        Next
    End With
    Set Dic1 = Nothing: Set Dic2 = Nothing: Set Dic3 = Nothing
End Sub

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


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

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

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