Excel 公式

Excel 行列转置(横竖互换)怎么做

更新于 2026-06-04 · 阅读约 6 分钟

把横排的数据竖过来、或把竖排的数据横过来——听起来简单,但 Excel 里藏着不少坑:静态转置源数据一改不会跟,动态 TRANSPOSE 函数又涉及数组输入;更根本的问题是,很多时候真正的需求不是「物理翻转」,而是「换个角度看数据」。本文把两种 Excel 做法和坑讲透,再介绍超级表里更顺手的替代思路。


办法一:选择性粘贴转置(静态)

这是最常用、最快捷的做法,适合一次性翻转、不需要联动的场景。步骤如下:

  1. 选中要转置的区域,按 Ctrl + C(Mac 用 ⌘ + C)复制。
  2. 点到一个空白区域的起始单元格(注意:转置后行列互换,目标区域不能和原数据有重叠)。
  3. Ctrl + Alt + V(Mac 用 ⌘ + Ctrl + V)打开「选择性粘贴」对话框,或右键菜单选「选择性粘贴」。
  4. 在对话框底部勾选「转置」复选框,点确定。

原来横向排列的一行数据,就变成了竖向一列;原来竖向的多行,就变成了横向多列。操作完之后,转置出来的是纯粹的值或格式——原数据和新数据之间没有任何连接。源区域改了,转置出来的那份不会自动跟着变。

选择性粘贴转置的适用场景
适合「一次性整理」:比如从系统导出一份横向报告,要把它整理成纵向明细,整理完以后原始报告就不再更新了。这种情况下静态转置够用,也最简单。

办法二:TRANSPOSE 函数(动态联动)

如果希望转置结果和原数据保持联动——原数据一改,转置结果自动跟着变——就需要用 TRANSPOSE 函数。写法:

=TRANSPOSE(A1:D4)

把原数据的区域填进括号里,TRANSPOSE 会把行变成列、列变成行,输出一个同样大小(但行列互换)的动态数组。

新版 Excel(Microsoft 365 / Excel 2021 及以上):直接在目标单元格输入公式,按回车确认,Excel 会自动把结果「溢出」到周边空白格,不用手动选区域。

老版 Excel(2019 及以下):需要先手动选中一片和结果大小相同的目标区域(比如原数据是 4 行×5 列,那转置结果是 5 行×4 列,就先选中 5 行×4 列),然后输入 =TRANSPOSE(A1:D4)不要按回车,要按 Ctrl + Shift + Enter 以数组公式形式输入(公式栏会显示大括号 {=TRANSPOSE(...)})。

动态 TRANSPOSE 的好处是:只要原数据改动,转置区域会立即刷新,不需要重新操作一遍。

这两个办法的坑

两种方式各有让人头疼的地方,用之前最好心里有数:

  • 选择性粘贴不联动:粘贴之后是死数据,源表改了要重新做一遍,容易出现「两份数据不一致」的问题,尤其是表格会持续更新的场景。
  • TRANSPOSE 数组公式难以编辑:老版 Excel 的数组公式(大括号那种)不能单独修改其中某个格的值,也不能在结果区域插入/删除行列;新版溢出数组稍好,但仍然不能直接在结果格手动输入。
  • 转置后公式引用可能乱:如果原数据里有公式(比如 =B2*1.1),选择性粘贴转置后这些引用会按新位置重新解读,很可能不是你想要的结果,需要手动检查每个有公式的格子。
  • 区域有合并单元格会报错:选择性粘贴转置遇到合并单元格会直接提示错误,必须先取消合并再操作。
  • TRANSPOSE 结果覆盖不了有内容的格:新版溢出公式会因为目标区域有内容而报 #SPILL! 错误,要先清空目标区域。
转置之前问自己一个问题
我真正想要的是「把这批数据物理翻转一次」,还是「换一个维度分析这批数据」?如果是后者,物理转置往往是绕路——换个维度看更直接的做法是分组汇总或透视,下面一节就讲这个。

换个角度:超级表里数据按字段组织,换维度看用分组汇总/透视

很多人做转置,真实动机是「我想从另一个角度统计这批数据」。比如:原来按月份横向排了各产品的销售额,想改成按产品分组、纵向列各月份。这其实是一个透视/分组汇总的需求,而不是「物理翻转」的需求。

超级表(TableDI)的数据是按「每行一条记录、每列一个字段」规范组织的。在这种结构下,「换角度看」直接用分组汇总或透视功能,不需要先把表格物理翻转一次。步骤:

  1. 把数据导入超级表(支持直接拖入 Excel / CSV),确保每列是一个字段(月份、产品名、金额各占一列)。
  2. 打开分组汇总面板,选择「按产品名分组」,汇总字段选「金额(求和)」。
  3. 如果要像 Excel 数据透视表那样同时看行维度和列维度,切换到透视视图,拖入行字段(产品)、列字段(月份)、值字段(金额求和)。
  4. 维度想换,直接拖字段重排,结果立即刷新——不需要重新转置原始表。

诚实说明:超级表本身没有「物理转置」这个操作入口,因为它的设计理念是让数据始终保持规范的「一行一记录」结构,换角度通过分组/透视实现。如果你确实需要把数据物理翻转后导出给别的系统用,目前还是要在 Excel 里做完转置再导入,或者在超级表里用分列整理好结构后再酌情处理。

想进一步了解超级表的透视功能,可以参考数据透视表怎么做

两种 Excel 转置方式对比

对比项选择性粘贴转置TRANSPOSE 函数
操作难度简单,几步即可老版需数组三键,新版较简单
结果是否联动源数据否,静态数据是,动态更新
能否手动修改转置结果能,随意编辑不能,结果由公式控制
遇到合并单元格报错,需先取消合并无法处理
公式引用是否跟转引用会重新解读,需检查动态计算,不存在此问题
适合场景一次性整理,之后不更新源数据持续变化,需要同步

常见问题

转置后数据不动,怎么让它联动?

选择性粘贴转置出来的是静态值,不会自动联动。要联动,需要换用 TRANSPOSE 函数:在空白区域输入 =TRANSPOSE(原始区域)。新版 Excel(Microsoft 365)直接回车就能溢出;老版 Excel 2019 及以下需要先选好目标区域,再用 Ctrl + Shift + Enter 以数组公式输入。注意目标区域必须是空的,否则新版会报 #SPILL!,老版数组公式也无法正常工作。

TRANSPOSE 函数报错怎么办?

常见的两类错误:一是新版 Excel 的 #SPILL!,说明转置结果要占据的格子里有内容,清空那片区域即可;二是老版数组公式输错了(忘了三键 Ctrl + Shift + Enter,或者选的目标区域大小不对),重新选对大小再输一遍。如果原数据包含合并单元格,TRANSPOSE 也无法处理,需要先把合并单元格拆开、补全空格内容,再做转置。

一行多列的宽表记录怎么规范成「一行一记录」的结构?

这个需求在从旧系统导出数据时很常见:比如一行存着某个人一月到十二月的销售额,十二个月占十二列。规范化的做法是把它「逆透视」——变成「姓名、月份、金额」三列、十二行的结构。Excel 里可以用 Power Query 的「逆透视列」功能;超级表里导入后可以配合分列和字段整理来处理;或者先在 Excel 里用 Power Query 逆透视后再导入超级表。数据变成「一行一记录」之后,换维度分组汇总就非常顺手了。

数据换个角度看,不用物理转置也能做到

免费下载超级表,把数据规范后用分组汇总 / 透视随时换维度,离线本地运行

免费下载(macOS / Windows)