Table of contents
该教程展示了在Excel中把行换成列的不同方法:公式、VBA代码和一个特殊工具。
在Excel中转换数据是许多用户熟悉的任务。 很多时候,你建立了一个复杂的表格,却发现为了更好地分析或在图表中展示数据,将其旋转是非常有意义的。
在这篇文章中,你会发现几种将行转换为列(或将列转换为行)的方法,不管你怎么叫,都是一样的:)这些解决方案在Excel 2010到Excel 365的所有版本中都适用,涵盖了许多可能的情况,并解释了大多数典型错误。
在Excel中使用特殊粘贴将行转换为列
假设你有类似于下面图形上部的数据集,国家名称被组织成列,但国家名单太长了,所以我们最好把列改为行,以使表格适合在屏幕上显示。
要把行换成列,请执行这些步骤。
- 选择原始数据。 要快速选择整个表格,即电子表格中所有有数据的单元格,按Ctrl + Home,然后按Ctrl + Shift + End 。
- 复制选中的单元格,可以通过右键点击选中的单元格并选择 拷贝 从上下文菜单或按Ctrl + C 。
- 选择目标区域的第一个单元格。
请确保选择的单元格不在包含原始数据的范围内,这样复制区域和粘贴区域就不会重叠。 例如,如果你目前有4列10行,转换后的表格将有10列4行。
- 右击目标单元格,选择 粘贴专用 从上下文菜单中选择 转位 .
更多信息,请参见《如何在Excel中使用特殊粘贴》。
注意:如果你的源数据包含公式,请确保正确使用相对和绝对引用,这取决于它们是否应该被调整或保持锁定在某些单元格。
正如你刚才看到的,"特殊粘贴 "功能可以让你在几秒钟内完成行到列(或列到行)的转换。 这种方法还可以复制原始数据的格式,这为它增加了一个有利因素。
然而,这种方法有 两个缺点 这使得它不能被称为Excel中数据转置的完美解决方案。
- 它不太适合用于旋转功能齐全的Excel表格。 如果你复制整个表格,然后打开 粘贴专用 对话框,你会发现 转位 在这种情况下,你需要复制没有列标题的表格,或者先将其转换为一个范围。
- 粘贴专用 > 转位 没有将新表与原始数据联系起来,所以它只适合于一次性转换。 每当源数据发生变化时,你就需要重复这个过程,重新旋转表。 没有人愿意把时间浪费在反复切换相同的行和列上,对吗?
如何转置一个表格并将其与原始数据连接起来
让我们看看如何使用熟悉的 "行 "与 "列 "之间的转换。 粘贴专用 这种方法最好的一点是,只要你改变源表中的数据,翻转的表就会反映这些变化并相应地更新。
- 复制你要转换为列的行(或要改变为行的列)。
- 在同一个或另一个工作表中选择一个空单元格。
- 打开 粘贴专用 对话框,如前面的例子所解释的,然后点击 粘贴链接 在左下角。
你会得到一个与此类似的结果。
这将使你的桌子变成一个有点可怕的东西,就像你在下面的截图中看到的那样,但不要惊慌,只要再走两步,你就能达到预期的效果。
这个办法有点长,但很优雅,不是吗? 这个办法的唯一缺点是,原始格式化在这个过程中会丢失,你需要手动恢复它(我会在本教程中进一步告诉你一个快速的方法)。
如何在Excel中使用公式进行转置
在Excel中动态切换列和行的一个更快捷的方法是使用TRANSPOSE或INDEX/ADDRESS公式。 与前面的例子一样,这些公式也保持与原始数据的联系,但工作方式有些不同。
使用TRANSPOSE函数将Excel中的行改为列
顾名思义,TRANSPOSE函数是专门为Excel中的数据转置而设计的。
=TRANSPOSE(array)在这个例子中,我们将转换另一个按人口列出美国各州的表格。
- 计算原表的行和列的数量,并选择相同数量的空白单元格,但在另一个方向。
例如,我们的样本表有7列6行,包括标题。 由于TRANSPOSE函数将把列改为行,我们选择6列7行的范围。
- 选定空单元格后,输入这个公式。
=transpose(a1:g6)
- 由于我们的公式需要应用于多个单元格,按Ctrl + Shift + Enter键,使其成为一个数组公式。
Voilà,列被改变为行,完全按照我们的要求。
TRANSPOSE功能的优点。
使用TRANSPOSE函数的主要好处是,旋转的表保留了与源表的连接,每当你改变源数据时,转置的表也会相应改变。
TRANSPOSE功能的弱点。
- 正如你在上面的截图中看到的那样,原始的表格格式不会保存在转换后的表格中。
- 如果原表中有任何空单元格,转置后的单元格将包含0。 要解决这个问题,请将TRANSPOSE与IF函数结合使用,如本例所解释的:如何进行无零转置。
- 你不能在旋转的表格中编辑任何单元格,因为它在很大程度上依赖于源数据。 如果你试图改变某些单元格的值,你会出现 "你不能改变数组的一部分 "的错误。
总结一下,不管囊括功能有多好,有多容易使用,它肯定缺乏灵活性,因此在很多情况下可能不是最好的方法。
欲了解更多信息,请参见Excel TRANSPOSE函数与实例。
用INDIRECT和ADDRESS函数将行转换成列
在这个例子中,将使用两个函数的组合,这是一个有点棘手的问题。 因此,让我们旋转一个较小的表格,以便能够更好地集中在公式上。
假设,你有4列(A-D)和5行(1-5)的数据。
要想让列转换为行,请执行以下操作。
- 在目标区域最左边的单元格(如A7)中输入以下公式,然后按回车键。
=indirect(address(column(a1),row(a1)))
- 通过拖动选定单元格右下角的小黑叉,将公式向右和向下复制到所需的行和列。
就这样!在你新创建的表中,所有的列都被转换为行。
如果你的数据从1以外的行和A以外的列开始,你将不得不使用一个更复杂的公式。
=indirect(address( column(a1) - column($a$1) + row($a$1), row(a1) - row($a$1) + column($a$1))
其中A1是源表中最左上角的单元格。 另外,请注意使用绝对和相对单元格引用。
然而,与原始数据相比,转置的细胞看起来非常平淡无奇。
但不要失望,这个问题很容易解决。 要恢复原来的格式,你要做的是以下几点。
- 复制原表。
- 选择产生的表格。
- 右键单击生成的表格并选择 粘贴选项 > 格式化 .
优势 : 这个公式提供了一种更灵活的方式来将Excel中的行变成列。 它允许在转置的表格中做任何改变,因为你使用的是普通公式,而不是数组公式。
缺点 我只看到一个问题--序号数据的格式化丢失了。 虽然,你可以快速恢复它,如上图所示。
这个公式如何运作
现在你知道了如何使用 INDIRECT / ADDRESS 组合,你可能想深入了解这个公式的实际作用。
顾名思义,INDIRECT函数是用来间接引用一个单元格的。 但INDIRECT的真正威力在于它可以把任何字符串变成一个引用,包括你用其他函数和其他单元格的值建立起来的字符串。 这正是我们要做的。 如果你跟上了这一点,你会很容易理解剩下的一切: )
正如你所记得的,我们在公式中还使用了3个函数--ADDRESS、COLUMN和ROW。
ADDRESS函数通过你指定的行号和列号分别获得单元格地址。 请记住顺序:第一-行,第二-列。
在我们的公式中,我们以相反的顺序提供坐标,这才是真正的诀窍!换句话说,公式的这一部分ADDRESS(COLUMN(A1),ROW(A1))将行换成了列,即取一个列号并将其变为行号,然后取一个行号并将其变为列号。
最后,INDIRECT函数输出旋转后的数据。 完全没有什么可怕的,不是吗?
使用VBA宏在Excel中进行数据转置
要在Excel中实现行与列的自动转换,你可以使用以下宏。
Sub TransposeColumnsRows() Dim SourceRange As Range Dim DestRange As Range Set SourceRange = Application.InputBox(Prompt:= "Please select the range to transpose" , Title:= "Transfose Rows to Columns" , Type :=8) Set DestRange = Application.InputBox(Prompt:= "Select upper left cell of the destination range" , Title:= "Transfose Rows to Columns" , Type :=8) SourceRange.Copy DestRange Select。Selection.PasteSpecial 粘贴:=xlPasteAll, Operation:=xlNone, SkipBlanks:= False , Transpose:= True Application.CutCopyMode = False End Sub要在你的工作表中添加一个宏,请遵循《如何在Excel中插入和运行VBA代码》中描述的指南。
注意:用VBA进行转置,有65536个元素的限制。 如果你的数组超过这个限制,多余的数据会被悄悄地丢掉。
如何使用宏来转换行到列
在你的工作簿中插入宏,执行以下步骤来旋转你的表格。
- 打开目标工作表,按Alt+F8,选择 转移列和行 宏,并点击 运转 .
享受结果吧 :)
用移位工具切换列和行
如果你需要经常进行行与列之间的转换,你可能实际上正在寻找一种更快、更简单的方法。 幸运的是,我的Excel中有这样一种方法,我们的终极套件的其他用户也是如此 :)
让我来告诉你如何在Excel中切换行和列,简直是点击几下就可以了。
- 在你的表格中选择任何一个单元格,进入 机会 标签> 转型 组,并点击 转位 按钮。
如果你想 只粘贴数值 或 创建与源数据的链接 如果要强制旋转的表格随着你对原始表格的每一次改变而自动更新,请选择相应的选项。
完成了!表格被转置了,格式被保留了,不需要进一步的操作。
如果你想尝试这个和其他70多个专业的Excel工具,我邀请你下载我们的终极套件的试用版。 谢谢你的阅读,我希望下周在我们的博客上见到你