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

如何在Excel中快速將多列堆疊為一列?

在Excel中,“文本到列”功能可以基於定界符將單元格拆分為多列,但是是否有任何方法可以將多列堆疊為一列,如下面的屏幕截圖所示? 在本文中,我將介紹一些快速解決此任務的技巧。
文檔堆棧列為1

用公式將多列堆疊為一

使用VBA將多列堆棧為一

使用Transform Range將多列堆疊為一列 好主意3


用公式將多列堆疊為一

1.選擇要堆疊的範圍,然後轉到 名稱框 為該範圍命名,然後按 Enter 鍵。 看截圖:
文檔堆棧列為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 for Applications 窗口。

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將多列堆疊為一列

申請 Excel的Kutools變換範圍 實用程序也可以幫助您快速解決此問題。

Excel的Kutools, 與以上 300 方便的功能,使您的工作更加輕鬆。 

免費安裝 Kutools for Excel,請執行以下操作:

1.選擇您使用的列數據,然後單擊 庫工具 > 範圍 > 變換範圍。 看截圖:
文檔堆棧列為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保護