Menu

Excel 转置:用 TRANSPOSE 函数把行变成列

=TRANSPOSE(A1:D3) 把 A1:D3 的行变成列,并与源数据保持联动。只需复制一次的话,用 选择性粘贴 > 转置。TOCOL 能把整个区域堆叠成一列。

本页的每张表格都是实时的:修改数字或公式,就会重新计算。

在 Excel 中要互换行和列,就在结果开始的位置输入 =TRANSPOSE(A1:D3):A1:D3 的第一行会变成结果的第一列。结果与源数据保持联动,所以修改源数据中的数字,副本也会跟着变。把 B2 改成 50,看看 B6 如何随之变化。

横排的季度变成竖排
A5
ABCD
1RepQ1Q2Q3
2Ann10129
3Ben81114
4
5RepAnnBen
6Q1108
7Q21211
8Q3914
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

源区域是 3 行 4 列,所以结果是 4 行 3 列。在 Excel 2021 和 Microsoft 365 中,TRANSPOSE 会自动溢出:只需在一个单元格中输入公式并按 Enter。

用选择性粘贴转置

如果只需要一次性得到行列互换的表格,选择性粘贴更快,而且不会留下公式:

  1. 选中区域并复制(Ctrl+C,Mac 上按 Cmd+C)。
  2. 单击结果要放置位置的左上角单元格,注意要在复制的区域之外。
  3. 在“开始”选项卡上单击“粘贴”下方的箭头,选择“转置”;或者按 Ctrl+Alt+V(Mac 上按 Cmd+Ctrl+V),勾选“转置”,再单击“确定”。

在 Windows 上,复制后依次按 Alt、H、V、T 也可以。粘贴的副本保留格式,但不再联动:源数据变化后需要重新粘贴。Excel 会把复制区域中的公式调整到新的位置;请检查使用相对引用的公式,如果只需要数字,就粘贴为值。

TRANSPOSE 语法

=TRANSPOSE(array)

唯一的参数是要翻转的区域或数组。TRANSPOSE 在 Excel 中由来已久,但在 Excel 2021 之前它是数组公式:要先选中大小合适的目标区域(上面的例子是 4 行 3 列),输入公式后按 Ctrl+Shift+Enter(Mac 上按 Cmd+Shift+Enter)。Excel 随后会用大括号显示它:{=TRANSPOSE(A1:D3)}。在 Excel 2021 和 Microsoft 365 中直接按 Enter 就够了,如果目标区域中有值挡住,就会出现 #SPILL!。

Google Sheets 也有 TRANSPOSE,同样会自动溢出。

把一列变成一行

同一个函数也能把单独一列翻转成一行,比如把一列姓名变成列标题:

一列姓名变成一行
C2
ABCDEFG
1Name
2AnnAnnBenCaraDanEve
3Ben
4Cara
5Dan
6Eve
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

C2 把 Ann 到 Eve 溢出到 C2:G2。在 A7 中添加一个姓名,它不会被包含进来,因为公式读取的是 A2:A6;把区域扩大到 A2:A7 或更大才能包含它。

为什么 TRANSPOSE 把空单元格显示成 0

指向空单元格的公式会返回 0,TRANSPOSE 也一样。下面的表格中 3 月没有销售额,所以普通写法在源数据为空的位置显示 0:

空单元格变成了 0
D4
ABCDE
1MonthJanFebMarApr
2Sales12095150
3
4MonthSalesMonthSales
5Jan120Jan120
6Feb95Feb95
7Mar0Mar
8Apr150Apr150
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

B7 中 Mar 对应的值显示为 0。第二个公式先用 IF 把每个空单元格变成空文本,所以 E7 保持空白。在 D2 中输入一个数字,两个公式都会显示它。

把多行转置成一列

要把整个区域堆叠成一列,请用 TOCOL(Microsoft 365 和 Excel 2024)。它逐行读取区域;TOROW 则是把值排成一行:

把一个区域堆叠成一列
F2
ABCDEF
1RepQ1Q2Q3All values
2Ann1012910
3Ben8111412
49
58
611
714
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

F2 先列出 Ann 这一行的 10、12、9,再列出 Ben 这一行的 8、11、14。如果要按列从上往下读,就把第三个参数设为 TRUE:=TOCOL(B2:D3,,TRUE)。=TOCOL(B2:D3,1) 会跳过空单元格。

练习:把横排的月份改成竖排

轮到你了
A5
ABCDE
1MonthJanFebMarApr
2Sales1209580150
3
4Months down
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

轮到你了: 在 A5 中把 A1:E2 的表格翻转过来,让月份沿 A 列向下排列,销售额沿 B 列向下排列。

转置,还是直接按行查找

很多人把宽表转置,只是为了对它使用 VLOOKUP。其实没有必要:HLOOKUP 和 XLOOKUP 可以直接在一行中查找。=XLOOKUP("Mar",B1:E1,B2:E2) 无需翻转,就能从上面的宽表中返回 3 月的销售额。只有当布局本身必须改变时才转置,比如为了做图表、做报表,或者某个系统要求每行一条记录。

常见问题

Excel 中怎么转置数据?

复制区域,右键单击结果要开始的单元格,选择 选择性粘贴 > 转置(按 Ctrl+Alt+V,再按 E 和 Enter)。这样粘贴的是固定副本。如果要随源数据更新,就在目标单元格中输入 =TRANSPOSE(A1:D3)。

为什么 TRANSPOSE 把空单元格显示成 0?

引用空单元格的公式会返回 0,TRANSPOSE 也不例外。先把空单元格换成空文本:=TRANSPOSE(IF(A1:E2="","",A1:E2))。

在 Excel 2019 或更早版本中怎么用 TRANSPOSE?

先选中行列互换后大小的目标区域(源区域是 3 行 4 列,就选 4 行 3 列),输入 =TRANSPOSE(A1:D3),再按 Ctrl+Shift+Enter(Mac 上按 Cmd+Shift+Enter)。Excel 2021 及更高版本只需按 Enter。

怎么把多行数据变成一列?

在 Microsoft 365 或 Excel 2024 中用 TOCOL:=TOCOL(B2:D3) 逐行读取区域,把所有值堆叠到一列中。=TOCOL(B2:D3,1) 会跳过空单元格,TOROW 则是把值排成一行。

Coddy 编程语言插图

和 Coddy 一起学编程

开始