Страницы: 1
RSS
Помогите размножить строки исходя из указанных количеств, Есть строки, в конце которых указано кол-во. Нужно чтобы строчки размножились в соответствии с этим кол-ом
 
Всем привет.

Есть таблица из 1000 строк по типу такой:
наименованиецветдлинакол-во
баклажан фиолетовый22см7
баклажан красный20см4
нужно, чтобы она превращалась в такую :
наименованиецветдлинакол-во
баклажан фиолетовый22см1
баклажан фиолетовый22см1
баклажан фиолетовый22см1
баклажан фиолетовый22см1
баклажан фиолетовый22см1
баклажан фиолетовый22см1
баклажан фиолетовый22см1
баклажан красный20см1
баклажан красный20см1
баклажан красный20см1
баклажан красный20см1
как сделать это встроенными функциями - не додумался.
Если поможете буду чрезмерно благодарен.

Заранее спасибо.
Изменено: MAxxx - 26.07.2020 22:28:33
 
Можно макросом.
 
MAxxx, так макросом устроит?
 
Файл с макросом во вложении

Код
Sub Размножить_наименования()
Dim arrData, arrResultData
Dim lastRow As Long, i As Long, counter As Long

    lastRow = Cells(Rows.Count, 1).End(xlUp).Row
    If lastRow = 1 Then
        MsgBox "На листе нет данных!", vbInformation, "Внимание"
        Exit Sub 'если на лист нет данных, то выход
    End If
    arrData = Range([A2], Cells(lastRow, "D")).Value 'берём данные с листа в массив
    Range([A2], Cells(lastRow, "D")).ClearContents 'удаляем данные с листа
    
    'считаем сколько строчек нужно будет в итоговом массиве при размножении данных
    counter = 0
    For i = 1 To UBound(arrData)
        counter = counter + CLng(arrData(i, 4))
    Next i
    ReDim arrResultData(1 To counter, 1 To 4) 'переопределяем размерность итогового массива
    
    'заполняем итоговый массив
    counter = 0
    For i = 1 To UBound(arrData)
        For n = 1 To CLng(arrData(i, 4)) 'размножаем столько раз, сколько указано в столбце D (4-й столбец)
            counter = counter + 1
            arrResultData(counter, 1) = arrData(i, 1) 'данные из столбца А
            arrResultData(counter, 2) = arrData(i, 2) 'данные из столбца В
            arrResultData(counter, 3) = arrData(i, 3) 'данные из столбца С
            arrResultData(counter, 4) = 1 'всегда 1
        Next n
    Next i
    
    'выгружаем итоговый массив на лист
    [A2].Resize(UBound(arrResultData, 1), UBound(arrResultData, 2)).Value = arrResultData

End Sub
Изменено: New - 26.07.2020 22:59:12
 
Ну и мой вариант.
 
Можно такой массивной формулой.
=ЕСЛИОШИБКА(ИНДЕКС(A$2:A$99;ПОИСКПОЗ(СТРОКА(F1)-1;СУММЕСЛИ(СМЕЩ($D$1;;;СТРОКА($1:$99));"<>")));"")
Только диапазон расширить.
Страницы: 1
Наверх