Как «отключить» или «обратный поворот» в Excel?


66

У меня есть данные, которые выглядят так:

Id | Loc1 | Loc2 | Loc3 | Loc4
---+------+------+------+-----
1  | NY   | CA   | TX   | IL
2  | WA   | OR   | NH   | RI

И я хочу преобразовать это в это:

Id | LocNum | Loc
---+--------+----
1  |   1    | NY
1  |   2    | CA
1  |   3    | TX
1  |   4    | IL
2  |   1    | WA
2  |   2    | OR
2  |   3    | NH
2  |   4    | RI

Какой самый простой способ сделать это в Excel 2007?


Ответы:


69

Вы можете сделать это с помощью сводной таблицы.

  1. Создайте «Сводную таблицу множественных диапазонов консолидации». (Только в мастере сводных таблиц. Вызов с ALT+ D, Pв Excel 2007)
  2. Выберите «Я создам свои собственные поля страницы».
  3. Выберите ваши данные.
  4. Двойной щелчок по общему итоговому значению - тот, что находится на пересечении Row Grand и Column Grand , полностью в правом нижнем углу сводной таблицы.

Вы должны увидеть новый лист, содержащий все данные в вашей сводной таблице, транспонированный так, как вы ищете.

Технологии Datapig предоставляют пошаговые инструкции , которые на самом деле более сложны, чем вам нужно - в его примере транспонируется только часть набора данных и используется метод сводных данных в сочетании с TextToColumns . Но там много картинок.

Обратите внимание, что сводная таблица сгруппирует данные. Если вы хотите, чтобы он был разгруппирован, единственный способ сделать это - скопировать сводную таблицу и «вставить специальные» в качестве значений. Затем вы можете заполнить пробелы с помощью такой техники: http://www.contextures.com/xlDataEntry02.html


Спасибо за ваш ответ, но я не совсем уверен, что вы здесь говорите. Для примера в моем вопросе, что я буду использовать для меток строк, меток столбцов, значений и фильтра отчетов?
devuxer

Если я помещу Id в метки строк, а Loc1 через Loc4 - в метки столбцов, а затем щелкните в правой нижней ячейке (пересечение общих итогов), она создаст новый лист с таблицей, но это не то, что мне нужно. В основном это просто копия обычной сводной таблицы.
devuxer

Я извиняюсь - я пропустил критическую часть данных. Сводная таблица должна быть сводной таблицей типа «несколько диапазонов консолидации», хотя в этом случае вам нечего консолидировать.
DaveParillo

4
А, ладно, я посмотрел в справке и нашел черный способ получить старый мастер сводных таблиц в Excel 2007 (нужно нажать ALT + D + P). Теперь я могу следовать вашим шагам, и это похоже на работу. Спасибо за вашу помощь!
devuxer

1
Вот как именно: stackoverflow.com/questions/32115219/…
Задор

7

Если ваши данные не сводная таблица Excel, а просто данные, вам может потребоваться «разворачивать» их с помощью некоторого простого кода VBA. Код зависит от двух именованных диапазонов, Source и Target. Источник - это данные, которые вы хотите отменить (исключая заголовки столбцов / строк, например, NY-RI в образце), а Target - первая ячейка, в которую вы хотите поместить свой результат.

Sub unPivot()
Dim oTarget As Range
Dim oSource As Range
Dim oCell As Range

Set oSource = Names("Source").RefersToRange
Set oTarget = Names("Target").RefersToRange

For Each oCell In oSource
    If oCell.Value <> "" Then
        oTarget.Activate
      ' get the column header
        oTarget.Value = oCell.Offset(-(oCell.Row - oSource.Row + 1), 0).Text 
      ' get the row header
         oTarget.Offset(0, 1).Value = oCell.Offset(0, _
           -(oCell.Column - oSource.Column + 1)).Text 
      ' get the value
        oTarget.Offset(0, 2).Value = oCell.Text 
      ' move the target pointer to the next row
        Set oTarget = oTarget.Offset(1, 0) 
    End If
Next
Beep
End Sub

1
Спасибо за это. Работает как исключено и заставляет меня экономить много времени.
tigrou

Спасибо!! это просто волшебство! намного лучше, чем jigiry-pokery с откровенными отчетами, которые никогда не работали для меня
trailmax

1
Это выглядит великолепно, но, насколько я могу судить, это будет работать только для таблицы, которая имеет только один заголовок строки. Если таблица в примере имеет несколько заголовков строк, скажем, у нее есть «SubId» в дополнение к полю Id, это не сработает. Есть ли простой способ изменить его, чтобы он работал в этой ситуации?
Крис Стокинг


4

В Excel 2010 есть довольно хорошее решение, просто нужно немного поиграть с сводной таблицей.

Создайте сводную таблицу из ваших данных с этими настройками:

  • без промежуточных итогов, без итогов
  • макет отчета: табличная форма, повторить все метки элементов
  • добавьте все нужные столбцы, оставьте нужные столбцы справа
  • для каждого столбца, который вы хотите преобразовать: откройте настройки поля - на вкладке макет и печать: выберите «Показать метки элементов в форме контура» и установите оба флажка под ним
  • скопировать таблицу в отдельное место (только значения)
  • если у вас есть пустые ячейки в исходных данных, отфильтруйте пустые значения в крайнем правом столбце и удалите эти строки (не фильтруйте в сводной таблице, поскольку она не будет работать так, как вам нужно!)

1
Это, безусловно, лучший ответ, если вы в 2010 году и выше, и совсем не очевидно в интерфейсе. Отличная находка - к сожалению, у меня есть только один upvote!
JKF

3

Лучшее, что я придумал, это:

Id   LocNum  Loc
---------------------------------
1    1       =INDEX(Data,A6,B6)
1    2       =INDEX(Data,A7,B7)
1    3       =INDEX(Data,A8,B8)
1    4       =INDEX(Data,A9,B9)
2    1       =INDEX(Data,A10,B10)
2    2       =INDEX(Data,A11,B11)
2    3       =INDEX(Data,A12,B12)
2    4       =INDEX(Data,A13,B13)

Это работает, но я должен генерировать Id и LocNum's вручную. Если есть более автоматизированное решение (помимо написания макроса), пожалуйста, дайте мне знать в отдельном ответе.


2

Если размеры ваших данных такие же, как в примере, приведенном в вашем вопросе, то следующий набор формул с использованием OFFSET должен дать вам требуемый результат:

Если предположить,

1 | Нью-Йорк | CA | TX | Иллинойс

2 | WA | ИЛИ | NH | Род-Айленд

находятся в диапазоне A2: E3, затем введите

= OFFSET ($ A $ 2, этаж ((СТРОКА (А2) -строка ($ A $ 2)) / 4,1), 0)

в F2, скажем, и

= MOD (СТРОКА (А2) -строка ($ A $ 2), 4) +1

в G2, скажем, и

= OFFSET ($ B $ 2, ПОЛ ((СТРОКА (В2) -строка ($ B $ 2)) / 4,1), MOD (СТРОКА (А2) -строка ($ A $ 2), 4))

в H2, скажем.

Затем скопируйте эти формулы, насколько это необходимо.

Это самое простое, чистое, встроенное решение для формул, которое я могу придумать.


1

Похоже, вы получили столбец «loc» (о чем свидетельствует ваш первый ответ), и теперь вам нужна помощь в получении двух других столбцов.

Ваш первый вариант - просто набрать первые несколько (скажем, 12) строк в эти столбцы и перетащить вниз - я думаю, что в этом случае Excel поступает правильно (у меня нет компьютера на этом компьютере, чтобы проверить это наверняка).

Если это не сработает, или если вы хотите что-то более программистское, попробуйте использовать функцию row (). Что-то вроде «= Floor (row () / 4)» для столбца идентификатора и «= mod (row (), 4) +1» для столбца LocNum.


1

Существует утилита параметрического преобразования VBA для отмены или обратного поворота данных обратно в таблицу базы данных, см.

http://www.spreadsheet1.com/unpivot-data.html


1
Добро пожаловать в Супер пользователя! Хотя это может теоретически ответить на вопрос, было бы предпочтительным включить здесь основные части ответа и предоставить ссылку для справки.
Peachy

1

Вот хороший инструмент для разворота, нормализации сводной таблицы.

Normalisieren von Pivot Tabellen

Я надеюсь, что это помогает.


1
Добро пожаловать в SuperUser! В то время как инструмент, на который вы ссылаетесь, предлагает решение, эта публикация полезна, только если ссылка остается активной Чтобы ваше сообщение оставалось полезным в будущем, отредактируйте свой ответ, включив в него дополнительную информацию о продукте, включая способы ее использования для решения проблемы, описанной в вопросе. Спасибо!
Excellll

1

Ответ @DaveParillo - лучший ответ для таблицы с одной вкладкой. Я хотел бы добавить некоторые дополнения здесь.

Для нескольких столбцов предварительно отключить столбцы

Этот метод не работает.

Youtube разворачивает простые данные как вопрос

Это видео на YouTube, показывающее, как это сделать простым способом. Я пропустил часть о добавлении ярлыка и использовал ярлык @devuxer, который есть в ответе DaveParillo.

https://www.youtube.com/watch?v=pUXJLzqlEPk


3
Суть вашего ответа - ссылка на видео, а содержание не описано. Если ссылка сломается или будет недоступна, ваш ответ не будет иметь значения. Пожалуйста, включите необходимую информацию в ваш ответ и используйте ссылку только для атрибуции и дальнейшего изучения.
fixer1234

-2

Это намного проще, чем это. Просто выберите опцию «Транспонировать» в «Специальная вставка ...», чтобы получить запрашиваемую транспозицию.


1
Это не сработает.
zx8754
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.