Макрос для переноса свойств по столбцам - VBA
Формулировка задачи:
Добрый день!
Имеется excel файл напечатанного ниже формата:
Столбец "A"
- артикул (служит идентификатором, повторяется для разных свойств);Столбец "B"
- название свойства;Столбец "С"
- описание свойства. Пример файла с повторяющимися артикулами для разных свойств:-
299571
LCD-дисплей: нет - 488447 LCD-дисплей: нет
- 488445 LCD-дисплей: нет
- 488444 LCD-дисплей: нет
- 253331 LCD-дисплей: нет
- 488446 LCD-дисплей: нет
- 336157 LCD-дисплей: нет
- 466206 LCD-дисплей: нет
- 120312 LCD-дисплей: нет
- 451045 LCD-дисплей: нет
- 471524 LCD-дисплей: нет
- 491343 LCD-дисплей: да
- 471522 LCD-дисплей: нет
-
299571
Страна: Франция - 488447 Страна: Франция
- 488445 Страна: Португалия
- 488444 Страна: Швейцария
- 253331 Страна: Португалия
- 488446 Страна: Румыния
- 336157 Страна: Румыния
- 466206 Страна: Румыния
- 120312 Страна: Румыния
- 451045 Страна: Румыния
- 471524 Страна: Румыния
- 491343 Страна: Италия
- 471522 Страна: Румыния
столбца "B"
оставит только уникальные значения, - которые будут размещаться по порядку на первой строке, начиная состолбца "B"
, продолжаястолбцом "C"
,столбцом "D"
и так далее в зависимости от количества найденных уникальныхназваний свойств
; 2. Встолбце "A"
начиная со второй строки будут размещатьсяартикула
; 3. Начиная состолбца "B"
и до последнего существующего, и начиная со второй ячейки до последней существующей, будут размещаться описания свойств, - размещение которых зависит от размещенияартикула
. Пример необходимого результат, напечатан ниже:- Артикул: LCD-дисплей: Страна:
-
299571
нет - 488447 нет
- 488445 нет
- 488444 нет
- 253331 нет
- 488446 нет
- 336157 нет
- 466206 нет
- 120312 нет
- 451045 нет
- 471524 нет
- 491343 да
- 471522 нет
-
299571
Франция - 488447 Франция
- 488445 Португалия
- 488444 Швейцария
- 253331 Португалия
- 488446 Румыния
- 336157 Румыния
- 466206 Румыния
- 120312 Румыния
- 451045 Румыния
- 471524 Румыния
- 491343 Италия
- 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