Транспонирование таблицы Excel с 1500 строками и 13 столбцами

Итак, у меня есть эта таблица в Excel, как показано ниже:

Таблица Excel для продаж.

В таблице 14 столбцов и 1500 строк, отображающих продажи автомобилей (для простоты).

Теперь я хочу, чтобы таблица была преобразована следующим образом:

Требуемая таблица Excel

Я знаю, что есть такая вещь, как формула транспонирования (которую я использовал для построения второй таблицы выше), но, очевидно, я не могу сделать это для каждой из всех 1500 строк в таблице.

Может ли кто-нибудь помочь мне с наиболее эффективным способом сделать это? Код VBA или макросы приветствуются.

Большое спасибо!


person user71812    schedule 26.01.2018    source источник
comment
Покажите нам свой код, чтобы мы могли вам помочь.   -  person dadler    schedule 26.01.2018
comment
Это может быть вопрос домашнего задания.   -  person Jem Eripol    schedule 26.01.2018
comment
@JemEripol - вопросы о домашнем задании разрешены до тех пор, пока предпринимается попытка. Вопросы с просьбой помочь с домашним заданием должны включать краткий обзор проделанной вами работы по решению проблемы, а также описание трудности, с которой вы столкнулись при ее решении. ( Источник). Также: Как задавать домашние вопросы и отвечать на них?   -  person ashleedawg    schedule 26.01.2018
comment
Создайте цикл for, который принимает каждую строку базовой таблицы. Внутри этого цикла создайте цикл, который принимает каждый столбец и записывает его на другом листе транспонированным образом.   -  person helpME1986    schedule 26.01.2018
comment
(Тем не менее, личная любимая мозоль, здесь & IRL: когда предложения начинаются с Так…)   -  person ashleedawg    schedule 26.01.2018
comment
Привет, спасибо всем за комментарии, очень ценю это! Но нет, это определенно не вопрос домашнего задания, поскольку это модифицированный набор данных, который я использовал для своей работы. И я не использовал для этого никакого кода; В настоящее время я вручную копирую и вставляю их в транспонированном виде... поэтому я спрашиваю об этом здесь.   -  person user71812    schedule 26.01.2018
comment
У меня была такая же проблема: stackoverflow.com/questions/48337054/   -  person Pierre44    schedule 26.01.2018
comment
@Pierre44, БОЛЬШОЕ СПАСИБО! Я проверил ваш пост, и идея использовать PowerQuery для этого блестящая! Спасибо еще раз! (Но как мне проголосовать за ваш ответ?)   -  person user71812    schedule 26.01.2018
comment
Вам нужно, чтобы данные отображались точно как в примере? Если нет - если вы просто хотите сгруппировать ветви и периоды вместе, простая сводная таблица сделает эту работу. Например, идентификаторы филиалов будут столбцами (один идентификатор на столбец); а месяцы будут строками. Пересечения будут итогами. Для этого не требуется VBA.   -  person Chris Melville    schedule 26.01.2018
comment
@ user71812, вы можете проголосовать за мой вопрос (и ответ от Джеффри) в другой теме;)   -  person Pierre44    schedule 26.01.2018


Ответы (1)


Попробуйте что-нибудь вроде этого

 Sub UnPivotData()
 Dim wsSource As Worksheet, wsDest As Worksheet
 Dim x, y, i As Long, j As Long, n As Long

'Assuming data is on a sheet called "Sheet1", change it if required
Set wsSource = Sheets("Sheet1")

x = wsSource.Cells(1).CurrentRegion.Value
ReDim y(1 To UBound(x, 1) * UBound(x, 2), 1 To 2)

For i = 2 To UBound(x, 1)
    For j = 2 To UBound(x, 2)
        If x(i, j) <> "" Then
            n = n + 1
            y(n, 1) = x(i, 1)
            y(n, 2) = x(i, j)
        End If
    Next
Next

On Error Resume Next
Set wsDest = Sheets("Transposed")
wsDest.Cells.Clear
On Error GoTo 0

If wsDest Is Nothing Then
    Sheets.Add(after:=wsSource).Name = "Transposed"
    Set wsDest = ActiveSheet
End If
wsDest.Range("A1:B1").Value = Array("Number", "Deatils")
wsDest.Range("A1").Resize(UBound(y), 550).Value = y
wsDest.Range("A1").CurrentRegion.Borders.Color = vbBlack
MsgBox "Data Transposed Successfully.", vbInformation, "Done!"
End Sub
person Sidney Bookeart    schedule 27.06.2018