如何在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中最简单的方法是什么?


Answers:


69

您可以使用数据透视表执行此操作。

  1. 创建一个“多个合并范围数据透视表”。(只有在数据透视表向导。Callup用ALT+ DP在Excel 2007中)
  2. 选择“我将创建自己的页面字段”。
  3. 选择您的数据。
  4. 双击总计总值-在Row GrandColumn Grand的相交处的值,一直到数据透视表的右下角。

您应该看到一个新工作表,其中包含数据透视表中的所有数据,并按照您想要的方式进行了转置。

Datapig技术提供的分步说明实际上比您需要的更复杂-他的示例仅转置了部分数据集,并使用了与TextToColumns结合使用的数据透视技术。但是它确实有很多图片。

请注意,数据透视表将对数据进行分组。如果要取消分组,唯一的方法是复制数据透视表,并“粘贴特殊”作为值。然后,您可以使用以下技术填补空白:http : //www.contextures.com/xlDataEntry02.html


感谢您的回答,但我不太确定您在说什么。对于我的问题中的示例,我将对行标签,列标签,值和报表过滤器使用什么?
devuxer

如果我将Id放入行标签,将Loc1到Loc4放入列标签,然后单击右下角的单元格(“总计”的交集),它的确会创建一个带有表格的新工作表,但这不是我想要的。它基本上只是常规数据透视表的副本。
devuxer

抱歉-我遗漏了关键数据。数据透视表必须是“多个合并范围”类型的数据透视表,即使在这种情况下,您没有要合并的内容。
DaveParillo

4
好的,我在帮助中进行了查找,找到了一种后门方式来获取Excel 2007中的旧数据透视表向导(您需要按ALT + D + P)。现在,我能够按照您的步骤进行操作,并且似乎可以正常运行。谢谢你的帮助!
devuxer

1
困惑

7

如果您的数据不是Excel数据透视表,而只是数据,则可能需要使用一些简单的VBA代码“取消数据透视表”。该代码取决于两个命名范围,即Source和Target。Source是您要取消透视的数据(不包括列/行标题,例如示例中的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 2014年

1
这看起来不错,但据我所知,它仅适用于只有一个行标题的表。如果示例中的表具有多个行标题,则说它在Id字段之外还具有一个“ SubId”,则将无法正常工作。有没有简单的方法可以对其进行修改,以使其在这种情况下起作用?
克里斯


4

Excel 2010中有一个很好的解决方案,只需要使用数据透视表即可。

使用以下设置从数据创建数据透视表:

  • 没有小计,没有总计
  • 报告布局:表格形式,重复所有项目标签
  • 添加所需的所有列,将要转换的列保留在右侧
  • 对于要转换的每一列:打开字段设置-在“布局和打印”选项卡中:选择“以大纲形式显示项目标签”并选中其下方的两个复选框
  • 将表格复制到单独的位置(只是值)
  • 如果原始数据中有空单元格,则在最右边的列中过滤出空值并删除这些行(不要在数据透视表中进行过滤,因为它无法按需工作!)

1
如果您在2010年及以后,并且在界面中一点都不明显,那么这无疑是最佳答案。很棒的发现-可惜我只有一个赞!
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。如果有一个更自动化的解决方案(除了编写宏),请在另一个答案中告诉我。


2

如果数据的维度与问题中提供的示例中的数据相同,则使用OFFSET的以下公式集应为您提供所需的结果:

假设

1 | 纽约| CA | TX | 白介素

2 | 西澳| 或 NH | RI

在A2:E3范围内,然后输入

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

在F2中说

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

在G2中说

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

在H2中,例如。

然后将这些公式复制到所需的距离。

这是我能想到的最简单,纯净的内置公式解决方案。


1

您似乎已经获得“ loc”列(第一个答案已证明),现在您需要帮助来获取其他两列。

您的第一个选择是简单地在这些列中键入前几行(例如12行)并向下拖动-我认为在这种情况下Excel可以正确执行操作(我肯定没有这台计算机上的excel可以对其进行测试)。

如果这不起作用,或者您想要更多的程序员知识,请尝试使用row()函数。对于ID列,类似于“ = Floor(row()/ 4)”,对于LocNum列,类似于“ = mod(row(),4)+1”。



1

这是一个取消透视表,标准化透视表的好工具。

范·皮沃特·塔贝伦

希望对您有所帮助。


1
欢迎来到超级用户!虽然您链接到的工具提供了解决方案,但是只有在链接保持活动状态时,此帖子才有用。为了确保您的帖子在将来仍然有用,请修改您的答案以包括有关该产品的所有其他信息,包括如何使用它来解决问题中所述的问题。谢谢!
Excellll 2014年

1

@DaveParillo答案是单个选项卡表的最佳答案。我想在这里添加一些额外功能。

对于多列,请先取消旋转列

此方法不起作用。

YouTube像问题一样简单数据

这是一个youtube视频,展示了如何以简单的方式进行操作。我跳过了有关添加快捷方式的部分,并使用了DaveParillo答案中的@devuxer快捷方式。

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


3
答案的实质是指向视频的链接,但未描述内容。如果链接断开或不可用,您的答案将没有任何价值。请在回答中包括必要的信息,并仅使用链接进行归因和进一步探索。
fixer1234

-2

比这简单得多。只需单击“选择性粘贴...”中的“移调”选项,即可获取所需的移调。


1
这行不通。
zx8754 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.