Перенести по условию - VBA (48698)
Формулировка задачи:
Добрый день!
Имеется excel файл, напечатанного ниже формата:
Столбец А - наименование;
Столбец B - описание и стоимость - разделены точкой с запятой ";".
Напишите пожалуйста макрос, который каждые последующие описание + стоимость, - перенесёт на новую строку, в столбцы B И C, - а в столбце A продублирует наименование.
Пример: Файл исходник:
(A) Вертолёт игрушечный (B) Оранжевый;410;Желтый;430;Красный;910
Пример: Файл Необходимый результат:
(A) Вертолёт игрушечный (B) Оранжевый (С) 410
(A) Вертолёт игрушечный (B) Желтый (С) 430
(A) Вертолёт игрушечный (B) Красный (С) 910
в файле исходнике около 50 тыс. строк.
Пример файла во вложении.
Решение задачи: «Перенести по условию»
textual
Листинг программы
- Option Explicit
- Sub thread1910957()
- Dim lLastRow&, i&, j%, RowInsert&
- Dim Arr() As String
- Dim VarRng As Variant
- Dim ws As Worksheet
- Dim wsR As Worksheet
- Dim lRowNew&
- Set ws = ThisWorkbook.Worksheets("Исходник") 'данные берем из этой книги, из листа исходник.
- Set wsR = Worksheets.Add 'результат выводим в новый лист
- lRowNew = 1 'счетчик строк резульата
- With ws
- lLastRow = .Cells(.Rows.Count, 1).End(xlUp).Row 'последняя не пустая строка входящих данных
- VarRng = .Range(.Cells(1, 1), .Cells(lLastRow, 2)) 'диапазон для обработки. С A1 до B полследней
- For i = 1 To UBound(VarRng, 1) 'цикл замены
- Debug.Print VarRng(i, 1) & "=" & VarRng(i, 2)
- Arr = Strings.Split(VarRng(i, 2), ";")
- For j = 0 To UBound(Arr)
- wsR.Range("A" & lRowNew).Value = VarRng(i, 1)
- If j Mod 2 = 0 Then 'если индекс четный, это цена, иначе, цвет
- wsR.Range("B" & lRowNew).Value = Arr(j)
- Else
- wsR.Range("C" & lRowNew).Value = Arr(j)
- lRowNew = lRowNew + 1
- End If
- Next j
- Next i
- End With
- MsgBox "Done"
- End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д