在 Excel 中要互换行和列,就在结果开始的位置输入 =TRANSPOSE(A1:D3):A1:D3 的第一行会变成结果的第一列。结果与源数据保持联动,所以修改源数据中的数字,副本也会跟着变。把 B2 改成 50,看看 B6 如何随之变化。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Rep | Q1 | Q2 | Q3 |
| 2 | Ann | 10 | 12 | 9 |
| 3 | Ben | 8 | 11 | 14 |
| 4 | ||||
| 5 | Rep | Ann | Ben | |
| 6 | Q1 | 10 | 8 | |
| 7 | Q2 | 12 | 11 | |
| 8 | Q3 | 9 | 14 |
源区域是 3 行 4 列,所以结果是 4 行 3 列。在 Excel 2021 和 Microsoft 365 中,TRANSPOSE 会自动溢出:只需在一个单元格中输入公式并按 Enter。
用选择性粘贴转置
如果只需要一次性得到行列互换的表格,选择性粘贴更快,而且不会留下公式:
- 选中区域并复制(Ctrl+C,Mac 上按 Cmd+C)。
- 单击结果要放置位置的左上角单元格,注意要在复制的区域之外。
- 在“开始”选项卡上单击“粘贴”下方的箭头,选择“转置”;或者按 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,同样会自动溢出。
把一列变成一行
同一个函数也能把单独一列翻转成一行,比如把一列姓名变成列标题:
| A | B | C | D | E | F | G | |
|---|---|---|---|---|---|---|---|
| 1 | Name | ||||||
| 2 | Ann | Ann | Ben | Cara | Dan | Eve | |
| 3 | Ben | ||||||
| 4 | Cara | ||||||
| 5 | Dan | ||||||
| 6 | Eve |
C2 把 Ann 到 Eve 溢出到 C2:G2。在 A7 中添加一个姓名,它不会被包含进来,因为公式读取的是 A2:A6;把区域扩大到 A2:A7 或更大才能包含它。
为什么 TRANSPOSE 把空单元格显示成 0
指向空单元格的公式会返回 0,TRANSPOSE 也一样。下面的表格中 3 月没有销售额,所以普通写法在源数据为空的位置显示 0:
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Month | Jan | Feb | Mar | Apr |
| 2 | Sales | 120 | 95 | 150 | |
| 3 | |||||
| 4 | Month | Sales | Month | Sales | |
| 5 | Jan | 120 | Jan | 120 | |
| 6 | Feb | 95 | Feb | 95 | |
| 7 | Mar | 0 | Mar | ||
| 8 | Apr | 150 | Apr | 150 |
B7 中 Mar 对应的值显示为 0。第二个公式先用 IF 把每个空单元格变成空文本,所以 E7 保持空白。在 D2 中输入一个数字,两个公式都会显示它。
把多行转置成一列
要把整个区域堆叠成一列,请用 TOCOL(Microsoft 365 和 Excel 2024)。它逐行读取区域;TOROW 则是把值排成一行:
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Rep | Q1 | Q2 | Q3 | All values | |
| 2 | Ann | 10 | 12 | 9 | 10 | |
| 3 | Ben | 8 | 11 | 14 | 12 | |
| 4 | 9 | |||||
| 5 | 8 | |||||
| 6 | 11 | |||||
| 7 | 14 |
F2 先列出 Ann 这一行的 10、12、9,再列出 Ben 这一行的 8、11、14。如果要按列从上往下读,就把第三个参数设为 TRUE:=TOCOL(B2:D3,,TRUE)。=TOCOL(B2:D3,1) 会跳过空单元格。
练习:把横排的月份改成竖排
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Month | Jan | Feb | Mar | Apr |
| 2 | Sales | 120 | 95 | 80 | 150 |
| 3 | |||||
| 4 | Months 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 则是把值排成一行。