Note: The other languages of the website are Google-translated. Back to English

如何在Excel中快速将多列堆叠为一列?

在Excel中,“文本到列”功能可以基于定界符将单元格拆分为多列,但是是否有任何方法可以将多列堆叠为一列,如下面的屏幕截图所示? 在本文中,我将介绍一些快速解决此任务的技巧。
文档堆栈列为1

用公式将多列堆叠为一

使用VBA将多列堆栈为一

使用Transform Range将多列堆叠为一列 好主意3


用公式将多列堆叠为一

1.选择要堆叠的范围,然后转到 名称框 为该范围命名,然后按 输入 键。 看截图:
文档堆栈列为2

2.然后选择要放置结果的空白单元格,输入此公式 =INDEX(MyData,1+INT((ROW(A1)-1)/COLUMNS(MyData)),MOD(ROW(A1)-1+COLUMNS(MyData),COLUMNS(MyData))+1), 按 恩特r键并向下拖动填充手柄,直到显示错误。 看截图:
文档堆栈列为3

在公式中,MyData是您在步骤1中指定的范围名称。

使用VBA将多列堆栈为一

这是可以帮助您的VBA代码。

1。 按 Alt + F11键 显示键 Microsoft Visual Basic应用程序 窗口。

2。 点击 插页 > 模块,将以下代码粘贴到 模块.

VBA:将列堆叠为一

Sub ConvertRangeToColumn()
'UpdatebyExtendoffice
Dim Range1 As Range, Range2 As Range, Rng As Range
Dim rowIndex As Integer
xTitleId = "KutoolsforExcel"
Set Range1 = Application.Selection
Set Range1 = Application.InputBox("Source Ranges:", xTitleId, Range1.Address, Type:=8)
Set Range2 = Application.InputBox("Convert to (single cell):", xTitleId, Type:=8)
rowIndex = 0
Application.ScreenUpdating = False
For Each Rng In Range1.Rows
    Rng.Copy
    Range2.Offset(rowIndex, 0).PasteSpecial Paste:=xlPasteAll, Transpose:=True
    rowIndex = rowIndex + Rng.Columns.Count
Next
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub

文档堆栈列为4

3。 按 F5 键运行代码,弹出对话框选择源数据,然后单击 OK选择要放置结果的单元格。 看截图:
文档堆栈列为5

4。 点击 OK。 现在,这些列已被堆叠为一列。
文档堆栈列为6


使用Transform Range将多列堆叠为一列

申请 Kutools for Excel变换范围 实用程序也可以帮助您快速解决此问题。

Kutools for Excel, 与超过 300 方便的功能,使您的工作更加轻松。 

免费安装 Kutools for Excel,请执行以下操作:

1.选择您使用的列数据,然后单击 库工具 > Range > 变换范围。 看截图:
文档堆栈列为8

2。 在里面 变换范围 对话框,检查 范围到单列 选项,然后单击 Ok,然后选择一个单元格以放置结果。 看截图:
文档堆栈列为9

3。 点击 OK。 现在,这些列已被堆叠为一个列。
文档堆栈列为1


最佳办公效率工具

Kutools for Excel解决了您的大多数问题,并使您的生产率提高了80%

  • 重用: 快速插入 复杂的公式,图表 以及您以前使用过的任何东西; 加密单元 带密码 创建邮件列表 并发送电子邮件...
  • 超级公式栏 (轻松编辑多行文本和公式); 阅读版式 (轻松读取和编辑大量单元格); 粘贴到过滤范围...
  • 合并单元格/行/列 不会丢失数据; 拆分单元格内容; 合并重复的行/列...防止细胞重复; 比较范围...
  • 选择重复或唯一 行; 选择空白行 (所有单元格都是空的); 超级查找和模糊查找 在许多工作簿中; 随机选择...
  • 确切的副本 多个单元格,无需更改公式参考; 自动创建参考 到多张纸; 插入项目符号,复选框等...
  • 提取文字,添加文本,按位置删除, 删除空间; 创建和打印分页小计; 在单元格内容和注释之间转换...
  • 超级滤镜 (将过滤方案保存并应用于其他工作表); 高级排序 按月/周/日,频率及更多; 特殊过滤器 用粗体,斜体...
  • 结合工作簿和工作表; 根据关键列合并表; 将数据分割成多个工作表; 批量转换xls,xlsx和PDF...
  • 超过300种强大功能. 支持 Office / Excel 2007-2021 和 365。支持所有语言。 在您的企业或组织中轻松部署。 完整功能 30 天免费试用。 60 天退款保证。
kte选项卡201905

Office选项卡为Office带来了选项卡式界面,使您的工作更加轻松

  • 在Word,Excel,PowerPoint中启用选项卡式编辑和阅读,发布者,Access,Visio和Project。
  • 在同一窗口的新选项卡中而不是在新窗口中打开并创建多个文档。
  • 每天将您的工作效率提高50%,并减少数百次鼠标单击!
officetab底部
按评论排序
注释 (25)
还没有评分。 成为第一位评论!
该评论由网站上的主持人最小化
您将多行堆叠成一列,而不是多列......不是我想要的。
该评论由网站上的主持人最小化
要堆叠 6 行块中的 AP 列,请将此公式放入单元格 R1 并填写

=OFFSET($A$1,MOD(ROW()-ROW($R$1),ROWS($A$1:$A$6)),TRUNC((ROW()-ROW($R$1))/ROWS($A$1:$A$6)),1,1)
该评论由网站上的主持人最小化
这工作完美,谢谢
该评论由网站上的主持人最小化
感谢您发布此解决方案! 如果有人在每个块的末尾/末尾需要一个空格,只需在行中添加一个额外的计数,因此按照上面的示例,而不是 $A$6,写成 $A$7。 它在行中输入一个零“0”,但您可以在 Sublime 中轻松地“使用选择进行查找”来编辑它们。 如果您知道不添加零的解决方案,请发布!?
该评论由网站上的主持人最小化
要输出空白单元格而不是 0,请执行 IF 函数>0,TRUE-->输出原始单元格内容,FALSE-->输出“”

=if(OFFSET($A$1,MOD(ROW()-ROW($R$1),ROWS($A$1:$A$6)),TRUNC((ROW()-ROW($R$1))/ROWS($A$1:$A$6)),1,1)>0,OFFSET($A$1,MOD(ROW()-ROW($R$1),ROWS($A$1:$A$6)),TRUNC((ROW()-ROW($R$1))/ROWS($A$1:$A$6)),1,1),"")
该评论由网站上的主持人最小化
亲,现在不行了! 尝试在一个新选项卡上,但它现在回到将列内容堆叠在一个而不是原来的行内容。
该评论由网站上的主持人最小化
取消最后一个,错过了截断步骤。
该评论由网站上的主持人最小化
我知道你很久以前就回答了这个问题,但是你能解释一下这个函数的每个部分到底是做什么的吗?
该评论由网站上的主持人最小化
也许这个教程可以帮助你。 https://www.extendoffice.com/documents/excel/3327-excel-convert-multiple-rows-to-columns.html
该评论由网站上的主持人最小化
这只是让您下载付费软件的诱饵
该评论由网站上的主持人最小化
第一次下载将在 60 天内免费使用,之后您可以决定是否付费使用。
该评论由网站上的主持人最小化
你好,有没有把上面的数据转换成下面的形式??
1
A
礼来公司
2
B
朱迪
...
该评论由网站上的主持人最小化
感谢您的留言,本教程 https://www.extendoffice.com/documents/excel/5401-excel-stack-columns-into-one-column.html
正在谈论如何解决这个问题,你可以去查看。
该评论由网站上的主持人最小化
我有在同一行结束但多列的数据,我希望它们按顺序堆叠,其中 B 列数据将位于 A 列数据下,其中 A 列和 C 列数据的数据将位于 A 列数据下B 列的数据在哪里结束,依此类推。 这样,我将拥有来自多列的数据以适合一列。 我怎样才能做到这一点?
该评论由网站上的主持人最小化
嗨,有没有办法让公式忽略您的数据可能包含的任何空白单元格?


=INDEX(MyData,1+INT((ROW(A1)-1)/COLUMNS(MyData)),MOD(ROW(A1)-1+COLUMNS(MyData),COLUMNS(MyData))+1),


我正在使用帮助表为数据验证下拉列表创建一个连续列表。 提前致谢。
该评论由网站上的主持人最小化
对不起,我不擅长公式,也许你可以尝试使用 Kutools for Excel 的选择非空白单元格实用程序先选择非空单元格,然后将它们复制并粘贴到另一个位置,然后使用上述方法。
该评论由网站上的主持人最小化
嗨,我希望在这方面更进一步。 我已经使用 VBA 将多列堆叠为一,代码和这个工作。 我已经使用表格作为此代码的源代码,并获得了列表。 有没有办法自动运行宏? 这样当我在表中添加新条目时,宏会自动运行并保持结果列表是最新的?
该评论由网站上的主持人最小化
嗨,克里斯布莱克本,对不起,我担心我找不到可以自动运行来更新结果的代码,也许其他人可以。
该评论由网站上的主持人最小化
我正在尝试在一个非常大的表上执行此操作(100 多个列和行都链接到公式。我的 excel 将继续加载,然后最终没有响应。有没有办法克服这个问题?谢谢
该评论由网站上的主持人最小化
嗨,汤姆,你应用的哪种方法不起作用? 方法三,变换范围工具必须可以工作。
该评论由网站上的主持人最小化
我正在使用 Stack Multiple Columns Into One With Formula 方法,它运行良好,但我希望它保持格式,即有些列是粗体的,1 是超链接。 是否可以在公式中添加一些东西来实现这一点?
该评论由网站上的主持人最小化
嗨,Susan Milard,他们的公式可以满足你的需要,你可以使用 VBA 或 Transpose Range 工具,它们都可以满足你。
该评论由网站上的主持人最小化
非常感谢,公式选项效果很好..你节省了我很多时间。
该评论由网站上的主持人最小化
感谢您提供公式和 VBA,但没有人按照帖子标题所说的那样做。 我期待他们堆叠列,但他们将每一行转置为一列并堆叠那些......所以它堆叠转置的行,而不是列。 在某些情况下仍然非常有用,但有谁知道如何修改公式和/或 VBA 以实际堆叠列? 我想我可以转置整个输入范围然后使用这些......
该评论由网站上的主持人最小化
对于那些希望将列堆叠成一但不将行堆叠成一的人,您需要清楚地了解您真正想要做什么。假设您有一些 3x3 数组,您希望 index() 函数以以下形式获取条目(行,列)对于(1,1),(2,1),(3,1),然后是(1,2),(2,2),(3,2)然后等等。所以你想要什么要做的是让 index() 引用包含所有行号 (1;2;3;1;2;3;1;2;3) 的单个列和包含所有列号 (1;1) 的单个列;1;2;2;2;3;3;3)。要得到(1;2;3;1;2;3;1;2;3),常用的编程方法是使用1+mod(some_counter -1,3) 其中 mod() 函数给出残差 0,1,2,0,1,2,...
为了得到 (1;1;1;2;2;2;3;3;3),使用 1+int((some_counter-1)/3) 得到 1+0, 1+0, 1+0 , 1+1, 1+1, 1+1, 1+2, 1+2, 1+2
因此,要将 3x3 数组堆叠为一个,请使用公式(按 Ctrl +Shft + Enter):=index( $A$1:$C$3, 1+mod(row(A1)-1,3), 1 +int((row(A1)-1)/3))) where row(A1) 在您向下填充公式时用作计数器
如果你把它反过来(行到列,列到行),你会得到堆成一列的行=INDEX($A$1:$C$3, 1+INT((ROW(A1)-1)/ 3),1+MOD(ROW(A1)-1,3)) 本质上就是本文的公式所做的

简而言之,用于将数组中的列堆叠成单列的公式是:=index( your_array_cells , 1+mod(row(A1)-1, number_of_rows_of_your_array ), 1+int((row(A1)-1 )/ number_of_columns_of_your_array)))
这里还没有评论
留下你的意见
以访客身份发帖
×
评价此帖子:
0   产品特性
建议地点

关注我们

版权所有 © 2009 - extendoffice.com。 | 版权所有。 供电 ExtendOffice。 | 网站地图
Microsoft和Office徽标是Microsoft Corporation在美国和/或其他国家的商标或注册商标。
受Sectigo SSL保护