Как преобразовать таблицу длинной формы в таблицу широкой формы в Excel?

#excel #function

#excel #функция

Вопрос:

Картинка стоит тысячи слов. Допустим, на одном листе у меня есть следующая таблица:

введите описание изображения здесь

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

введите описание изображения здесь

Как вы можете этого добиться?

Комментарии:

1. @A.S.H Я не думаю, что это плохой вопрос. Я задал вопрос, потому что я не эксперт Excel. Я могу сделать это в R за секунду, но мне было любопытно, можно ли это сделать в «excel» так же эффективно, как я работал с электронной таблицей Excel.

2. Когда я комментировал, я не заметил, что это был очень старый пост, возрожденный из-за нового ответа.

Ответ №1:

Использование VBA:

 Range("G1:K99").Clear
For Each xx In Range("A:A")
    If xx.Value = "" Then Exit Sub
    Range("G1").Offset(xx.Value, 0) = xx.Value
    For e = 1 To 99
        If Range("G1").Offset(xx.Value, e) = "" Then
            Range("G1").Offset(xx.Value, e) = xx.Offset(0, 1).Value
            Exit For
        End If
    Next
Next
  

Таблица, созданная из столбца «G». Если вам нужен другой лист:

 Sheets(2).Range("G1: ...
  

добавьте листы раньше…

Без VBA, следуя схеме:

введите описание изображения здесь

Добавление формул:

 M2 -> =IFERROR(MATCH(L2;$A$1:$A$8;);"")
N2 -> =IFERROR(MATCH(L2;INDIRECT("$A" amp; (M2 1) amp; ":$A$8");) M2;"")
O2 -> =IFERROR(MATCH(L2;INDIRECT("$A" amp; (N2 1) amp; ":$A$8");) N2;"")
P2 -> =IFERROR(INDEX($B$1:$B$8;M2);"")          Autocomplete also columns to R
  

и автозаполнение …

Ответ №2:

Я вижу и другой подход. Добавьте два столбца Count и Key.

Пример

Добавьте формулы и разверните:

 C2 -> =COUNTIF($B$2:B2;B2)
D2 -> =B2amp;"|"amp;C2
G2 -> =IFERROR(INDEX($A:$A;MATCH($F2amp;"|"amp;COLUMN(A1);$D:$D;0));"")