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

105854
devuxer

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

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?

63
Нашел ответ: http://stackoverflow.com/questions/32115219/unpivot-an-excel-matrix-pivot-table/32116657#32116657 Quandary 9 лет назад 0

11 ответов на вопрос

66
DaveParillo

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

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

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

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

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

Спасибо за ваш ответ, но я не совсем уверен, что вы говорите здесь. Для примера в моем вопросе, что я буду использовать для меток строк, меток столбцов, значений и фильтра отчетов? devuxer 14 лет назад 0
Если я помещу Id в метки строк, а Loc1 через Loc4 - в метки столбцов, а затем щелкните в правой нижней ячейке (пересечение общих итогов), она создаст новый лист с таблицей, но это не то, что мне нужно. Это просто копия обычной сводной таблицы. devuxer 14 лет назад 0
Я извиняюсь - я пропустил важную часть данных. Сводная таблица ** должна ** быть сводной таблицей типа «несколько диапазонов консолидации», хотя в этом случае вам нечего консолидировать. DaveParillo 14 лет назад 0
Дэйв, спасибо за редактирование твоего ответа, но ты уверен, что эти инструкции применимы к Excel 2007? Я не вижу ничего о "нескольких диапазонах консолидации". devuxer 14 лет назад 0
А, ладно, я посмотрел в справке и нашел черный способ получить старый мастер сводных таблиц в Excel 2007 (нужно нажать ALT + D + P). Теперь я могу следовать вашим шагам, и это похоже на работу. Спасибо за вашу помощь! devuxer 14 лет назад 4
Определенно работает, спасибо! У меня возникли проблемы с выполнением сжатых инструкций DaveParillo, и я обнаружил, что мне нужно следовать пошаговым инструкциям DataPig, чтобы все заработало. Фотографий! Kent Hu 11 лет назад 0
Вот как именно: http://stackoverflow.com/questions/32115219/unpivot-an-excel-matrix-pivot-table/32116657#32116657 Quandary 9 лет назад 0
Может ли это работать, если есть * два * уровня заголовков столбцов? Например, здесь уже есть Loc1, Loc2, Loc3, Loc4 - но что, если строка выше. Loc1 и Loc2 находятся в LocGroup1, а Loc3 и Loc4 находятся в LocGroup2? The Red Pea 8 лет назад 0
Ох, я могу сделать * 2 * уровней, но это новый набор шагов (в частности, добавление двух диапазонов, одного для LocGroup1 и одного для LocGroup2), и * вручную *, присваивая имена каждому из этих диапазонов для соответствующего Grouper. У кого-нибудь еще есть такой опыт? The Red Pea 8 лет назад 0
6
TJMelrose

Если ваши данные не сводная таблица 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 
Спасибо за это. Работает как исключение и заставляет меня экономить много времени. tigrou 11 лет назад 1
Спасибо!! это просто волшебство! намного лучше, чем jigiry-pokery с отмененными отчетами, которые никогда не работали для меня trailmax 10 лет назад 0
Это выглядит великолепно, но, насколько я могу судить, это будет работать только для таблицы, которая имеет только один заголовок строки. Если таблица в примере имеет несколько заголовков строк, скажем, у нее есть «SubId» в дополнение к полю Id, это не сработает. Есть ли простой способ изменить его, чтобы он работал в этой ситуации? Chris Stocking 9 лет назад 0
5
nutsch

Я создал надстройку, которая позволит вам сделать это, и которая позволяет легко адаптироваться к различным ситуациям. Проверьте это здесь: http://tduhameau.wordpress.com/2012/09/24/the-unpivot-add-in/

3
devuxer

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

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 вручную. Если есть более автоматизированное решение (помимо написания макроса), пожалуйста, дайте мне знать в отдельном ответе.

3
Máté Juhász

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

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

  • без промежуточных итогов, без итогов
  • макет отчета: табличная форма, повторить все метки элементов
  • добавьте все нужные столбцы, оставьте нужные столбцы справа
  • для каждого столбца, который вы хотите преобразовать: откройте настройки поля - на вкладке макет и печать: выберите «Показать метки элементов в форме контура» и установите оба флажка под ним
  • скопировать таблицу в отдельное место (только значения)
  • если у вас есть пустые ячейки в исходных данных, отфильтруйте пустые значения в крайнем правом столбце и удалите эти строки (не фильтруйте в сводной таблице, поскольку она не будет работать так, как вам нужно!)
Это, безусловно, лучший ответ, если вы в 2010 году и старше, и совсем не очевидно в интерфейсе. Отличная находка - к сожалению, у меня есть только один upvote! jkf 6 лет назад 1
2
Aaa

If the dimensions of your data are as in the sample provided in your question, then the following set of formulae using OFFSET should give you your required result:

Assuming

1 | NY | CA | TX | IL

2 | WA | OR | NH | RI

are in the range A2:E3, then enter

=OFFSET($A$2,FLOOR((ROW(A2)-ROW($A$2))/4,1),0)

in F2, say, and

=MOD(ROW(A2)-ROW($A$2),4)+1

in G2, say, and

=OFFSET($B$2,FLOOR((ROW(B2)-ROW($B$2))/4,1),MOD(ROW(A2)-ROW($A$2),4))

in H2, say.

Then copy these formulae down as far as required.

This is the easiest, pure, built-in formula solution that I can think of.

1

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

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

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

1
Petros

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

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

Добро пожаловать в Супер пользователя! Хотя это может теоретически ответить на вопрос, [было бы предпочтительнее] (http://meta.stackexchange.com/q/8259) включить сюда основные части ответа и предоставить ссылку для справки. Peachy 12 лет назад 1
1
L4a-Thompson

Here is a nice tool to unpivot, normalize a Pivot Table.

Normalisieren von Pivot Tabellen

I hope it helps.

Добро пожаловать в SuperUser! В то время как инструмент, на который вы ссылаетесь, предлагает решение, эта публикация полезна, только если ссылка остается активной. Чтобы ваше сообщение оставалось полезным в будущем, [отредактируйте] (http://superuser.com/posts/745524/edit) свой ответ, включив в него любую дополнительную информацию о продукте, включая способы ее использования для решения Проблема описана в вопросе. Спасибо! Excellll 10 лет назад 1
1
BrinkDaDrink

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

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

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

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

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

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

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

Похожие вопросы