Перенести по условию - VBA (48698)

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

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

Добрый день! Имеется excel файл, напечатанного ниже формата: Столбец А - наименование; Столбец B - описание и стоимость - разделены точкой с запятой ";". Напишите пожалуйста макрос, который каждые последующие описание + стоимость, - перенесёт на новую строку, в столбцы B И C, - а в столбце A продублирует наименование. Пример: Файл исходник: (A) Вертолёт игрушечный (B) Оранжевый;410;Желтый;430;Красный;910 Пример: Файл Необходимый результат: (A) Вертолёт игрушечный (B) Оранжевый (С) 410 (A) Вертолёт игрушечный (B) Желтый (С) 430 (A) Вертолёт игрушечный (B) Красный (С) 910 в файле исходнике около 50 тыс. строк. Пример файла во вложении.

Решение задачи: «Перенести по условию»

textual
Листинг программы
  1. Option Explicit
  2.  
  3. Sub thread1910957()
  4.     Dim lLastRow&, i&, j%, RowInsert&
  5.     Dim Arr() As String
  6.     Dim VarRng As Variant
  7.     Dim ws As Worksheet
  8.     Dim wsR As Worksheet
  9.     Dim lRowNew&
  10.    
  11.     Set ws = ThisWorkbook.Worksheets("Исходник") 'данные берем из этой книги, из листа исходник.
  12.    Set wsR = Worksheets.Add 'результат выводим в новый лист
  13.    
  14.     lRowNew = 1 'счетчик строк резульата
  15.    With ws
  16.         lLastRow = .Cells(.Rows.Count, 1).End(xlUp).Row 'последняя не пустая строка входящих данных
  17.        VarRng = .Range(.Cells(1, 1), .Cells(lLastRow, 2)) 'диапазон для обработки. С A1 до B полследней
  18.        For i = 1 To UBound(VarRng, 1) 'цикл замены
  19.            Debug.Print VarRng(i, 1) & "=" & VarRng(i, 2)
  20.             Arr = Strings.Split(VarRng(i, 2), ";")
  21.             For j = 0 To UBound(Arr)
  22.                 wsR.Range("A" & lRowNew).Value = VarRng(i, 1)
  23.                 If j Mod 2 = 0 Then 'если индекс четный, это цена, иначе, цвет
  24.                    wsR.Range("B" & lRowNew).Value = Arr(j)
  25.                 Else
  26.                     wsR.Range("C" & lRowNew).Value = Arr(j)
  27.                     lRowNew = lRowNew + 1
  28.                 End If
  29.             Next j
  30.         Next i
  31.     End With
  32.     MsgBox "Done"
  33. End Sub

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


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

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

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

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

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

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