Страницы: 1
RSS
Транспонирование столбцов с в строки с переносом получившего массива по частям
 
Приветствую друзья! Прошу помощи с решением задачи.
Есть вертикальная таблица, которую нужно транспонировать, и потом распечатать. Проблема в том, что при обычном транспонировании таблица растягивается горизонтально на  несколько листов и приходится копировать несколько частей и вставлять друг под друга, чтобы можно было распечатать  нормально.
Не могу написать код, который бы транспонировал, например горизонтально не более 10 столбцов, следующую часть вставлял под них и так далее до окончания  исходного списка данных.

Пример прикрепил. там более наглядно. Заранее благодарен за любую помощь
Изменено: Dyroff - 17.11.2018 19:28:57
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
Данные в масив aData.
Обработать в цикле с шагом 10, приблизительно так:
Код
ReDim aResult(1 To UBound(aData) / 10, 1 To 10)

For i = 2 To UBound(aData) Step 10
    k = k + 1
    
    For j = 1 To 10
        aResult(k, j) = aData(i + j, 1)
        aResult(k + 1, j) = aData(i + j, 2)
        aResult(k + 2, j) = aData(i + j, 3)
    Next j
    
    k = k + 2
Next i
 
У Вас в примере в горизонтальной таблице число транспонируемых  столбцов кратно 10, в реальном примере так же?
"Все гениальное просто, а все простое гениально!!!"
 
Nordheim, исходный диапазон может быть любой размерности. Результат, который нужно выводить- не более 10 столбцов.
То есть может быть первая часть 10 столбцов, вторая тоже, а третья 3. Если в исходных данных , например было 23 строки
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
vikttur,спасибо большое за вариант! Подожду ещё вариантов решений от участников  
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
А чего ждать? Открывайте редактор - и вперед! Или Вам с бантиком нужно?
 
vikttur,ой ну ладно вам, что сразу с бантиком то) Интересно же:)
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
Код
Sub test()
    Dim lrow&, columncount&, i&, ch&
    Application.ScreenUpdating = False
    columncount = Range([f4], [f4].End(xlToRight)).Columns.Count / 10 + 1
    ch = 6
    For i = 1 To columncount
        lrow = Range("f" & Rows.Count).End(xlUp).Row + 1
        If i = 1 Then lrow = lrow + 2
        Cells(4, ch).Resize(3, 10).Copy Cells(lrow, 6)
        ch = ch + 10
    Next i
    Application.ScreenUpdating = True
End Sub
"Все гениальное просто, а все простое гениально!!!"
 
Nordheim,Круто! Спасибо огромное!
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
формула"
=ЕСЛИОШИБКА(ИНДЕКС($A$3:$C$32;ОТБР((СТРОКА()-2)/3)*10+СТОЛБЕЦ(A1);ОСТАТ((СТРОКА(A1)-1);3)+1);"")
Изменено: Михаил С. - 17.11.2018 21:03:49
 
Михаил С.,Спасибо и Вам за вариант. Не думал даже что формулой это можно сделать:)
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
Dyroff, при желании можно и в PQ сделать.
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    #"Измененный тип" = Table.TransformColumnTypes(Источник,{{"Артикул ", type text}, {"Товар", type text}, {"Цена", type text}}),
    #"Добавлен индекс" = Table.AddIndexColumn(#"Измененный тип", "Индекс", 0, 1),
    #"Вставлено: целочисленное деление" = Table.AddColumn(#"Добавлен индекс", "Группа", each Number.IntegerDivide([Индекс], 10), Int64.Type),
    #"Удаленные столбцы" = Table.RemoveColumns(#"Вставлено: целочисленное деление",{"Индекс"}),
    #"Сгруппированные строки" = Table.Group(#"Удаленные столбцы", {"Группа"}, {{"Табла", each Table.Transpose( Table.RemoveColumns( _, {"Группа"} ) ), type table}}),
    #"Удаленные столбцы1" = Table.RemoveColumns(#"Сгруппированные строки",{"Группа"}),
    #"Развернутый элемент Табла" = Table.ExpandTableColumn(#"Удаленные столбцы1", "Табла", {"Column1", "Column2", "Column3", "Column4", "Column5", "Column6", "Column7", "Column8", "Column9", "Column10"}, {"Column1", "Column2", "Column3", "Column4", "Column5", "Column6", "Column7", "Column8", "Column9", "Column10"})
in
    #"Развернутый элемент Табла"

Преобразовывалась исходная таблица, а не транспонированная,
Изменено: PooHkrd - 19.11.2018 16:50:00
Вот горшок пустой, он предмет простой...
 
Ещё одна формула
Код
=IFERROR(INDEX($A$3:$C$320;IF(COLUMNS($E:E)<=10;COLUMNS($E:E);1/0)+(CEILING(ROWS($12:12)/3;1)-1)*10;MOD(ROWS($12:12)-1;3)+1);"")
Страницы: 1
Наверх