將列 /行轉換為excel中的數組:wrapcols&Wraprows功能
Mar 25, 2025 am 09:36 AM將值或行轉換為二維數組的最快方法是使用Wrapcols或Wraprows函數。
自Excel的最早時代以來,它一直非常擅長計算和分析數字。但是傳統上,操縱陣列是一個挑戰。動態陣列的引入使陣列公式的使用變得更加容易。現在,微軟正在發布一組新的動態陣列功能來操縱和重新形狀數組。本教程將教您如何使用兩個這樣的功能,包裹和包裹物,以立即將列或行轉換為2D數組。
Excel Wrapcols功能
Excel中的Wrapcols函數根據每個行的指定數量值將值或列轉換為二維數組。
語法具有以下論點:
wrapcols(vector,wrap_count,[pad_with])在哪裡:
- 向量(必需) - 源一維數組或範圍。
- wrap_count (必需) - 每列的最大值數。
- PAD_WITH (可選) - 如果沒有足夠的項目填寫,則使用最後一列的值。如果省略,則缺失值將用#N/A(默認值)填充。
例如,要將b5:b24範圍更改為具有每列5個值的二維陣列,該公式為:
=WRAPROWS(B5:B24, 5)
您在任何單個單元中輸入該公式,並根據需要自動溢出到盡可能多的單元中。在Wrapcols輸出中,根據WRAP_COUNT值垂直從上到下排列該值。達到計數後,開始了一個新的列。
Excel Wraprows功能
Excel中的Wraprows函數根據您指定的每個行的值數量,將值或列轉換為二維數組。
語法如下:
wraprows(vector,wrap_count,[pad_with])在哪裡:
- 向量(必需) - 源一維數組或範圍。
- wrap_count (必需) - 每行的最大值數。
- PAD_WITH (可選) - 如果沒有足夠的項目來填充它,則與最後一行的值。默認值為#n/a。
例如,要將B5:B24範圍轉換為具有5個值的2D數組,公式為:
=WRAPROWS(B5:B24, 5)
您可以在溢出範圍的左上方單元格中進入公式,並自動填充所有其他單元。 Wraprows函數根據WRAP_COUNT值從左到右水平排列值。達到計數後,它開始了一個新的行。
包裹和包裹物的可用性
這兩個功能僅在Microsoft 365(Windows和Mac)的Excel中可用,並且可用於Web。
在較早的版本中,您可以使用傳統的更複雜的公式執行列到陣列和陣列轉換。在本教程中,我們將詳細討論替代解決方案。
提示。要執行反向操作,IE將2D數組更改為單列或行,分別使用Tocol或Torow函數。
如何將列 /行轉換為Excel中的範圍 - 示例
現在,您已經掌握了基本用法,讓我們仔細研究一些更具體的情況。
設置每列或行的最大值數量
根據原始數據的結構,您可能會發現將其重新安排到列(Wrapcols)或行(Wraprows)中。無論您使用哪個函數,都是wrap_count參數,它確定每個列/行中的最大值數。
例如,要將範圍B4:B23轉換為2D數組,以使每列最多具有10個值,請使用此公式:
=WRAPCOLS(B4:B23, 10)
要按行重新排列相同的範圍,以使每行的最大值為4個值,公式為:
=WRAPROWS(B4:B23, 4)
下圖顯示了它的外觀:
在結果數組中的墊子缺失值
如果沒有足夠的值無法填充所得範圍的所有列/行,則包裹和Wrapcols將返回#N/A錯誤以保持2D數組的結構。
要更改默認行為,您可以為可選的pad_with參數提供自定義值。
例如,要將範圍B4:B21轉換為具有最大5個值寬的2D數組,如果沒有足夠的數據填充數據,則用破折號填充最後一行,請使用此公式:
=WRAPROWS(B4:B21, 5, "-")
要用零長度字符串(空白)替換缺失值,公式為:
=WRAPROWS(B4:B21, 5, "")
請將結果與省略PAD_WITH的默認行為(公式)進行比較:
將多行合併為2D範圍
要將幾行組合到單個2D數組中,您首先使用HSTACK函數水平堆疊行,然後使用Wraprows或Wrapcols包裝值。
例如,要合併3行(b5:j5,b7:g7和b9:f9)的值,並將其包裹成列,每個列包含10個值,該公式為:
=WRAPCOLS(HSTACK(B5:J5, B7:G7, B9:F9), 10)
要將從多行的值組合到每個行包含5個值的2D範圍內,該公式採用此表單:
=WRAPROWS(HSTACK(B5:J5, B7:G7, B9:F9), 5)
將多列組合成2D數組
要將幾列合併到2D範圍內,首先,您使用VSTACK函數垂直堆疊它們,然後將值包裝到行(Wraprows)或列(Wrapcols)中。
例如,將來自3列(B5:J5,B7:G7和B9:F9)的值組合到一個2D範圍中,其中每列包含10個值,該公式為:
=WRAPCOLS(HSTACK(B5:J5, B7:G7, B9:F9), 10)
要將相同的列組合到每個行包含5個值的2D範圍內,請使用此公式:
=WRAPROWS(HSTACK(B5:J5, B7:G7, B9:F9), 5)
包裝並排序陣列
在源範圍的情況下,在您希望將輸出分類的情況下以隨機順序為準值時,以此方式進行:
- 按照您想要的方式對初始數組進行排序。
- 將排序的陣列提供給包裹或包裹。
例如,將B4:B23的範圍包裝到行中,每個值中的4個值,然後對結果進行排序,從A到Z,構造一個公式:
=WRAPROWS(SORT(B4:B23), 4)
要將相同範圍包裹在列中,每個值10個值,然後按字母順序排序輸出,公式為:
=WRAPCOLS(SORT(B4:B23), 10)
結果如下:
提示。要按降序排列在結果數組中的值,請將排序函數的第三個參數( sort_order )設置為-1。
Excel 365- 2010年的Wrapcols替代品
在不支持Wrapcols功能的較舊的Excel版本中,您可以構建自己的公式將一個維數組中的值包裝到列中。這可以通過一起使用5個不同的功能來完成。
Wrapcols替代方案將行轉換為2D範圍:
ifError(if(ROW(A1)> n ,“”,index( row_range ,,row(a1)(列(A1)-1)* n )),“”),“”)Wrapcols替代方案將列轉換為2D範圍:
ifError(if(row(a1)> n ,“”,index( column_range ,row(a1)(column(a1)-1)* n )),“”),“”)其中n是每個列的最大值。
在下圖中,我們使用以下公式將單行範圍(D4:J4)轉換為三行陣列。
=IFERROR(IF(ROW(A1)>3, "", INDEX($D$4:$J$4, , ROW(A1) (COLUMN(A1)-1)*3)), "")
而且該公式將單列範圍(B4:B20)更改為五行陣列:
=IFERROR(IF(ROW(A1)>5, "", INDEX($B$4:$B$20, ROW(A1) (COLUMN(A1)-1)*5)), "")
上面的溶液模仿類似的包裹物配方並產生相同的結果:
=WRAPCOLS(D4:J4, 3, "")
和
=WRAPCOLS(B4:B20, 5, "")
請記住,與動態陣列包裹函數不同,傳統公式遵循單式單元的方法。因此,我們的第一個公式在D8中輸入,並在右側複製3行和3列。第二個公式在D14中輸入,並在右側複製5行和4列。
這些公式如何工作
在兩個公式的核心中,我們使用索引函數,該功能根據行和列號從提供數組中返回值:
索引(array,row_num,[column_num])當我們處理一行數組時,我們可以省略row_num參數,因此默認為1。訣竅是對複制公式的每個單元格自動計算col_num 。這就是我們這樣做的方式:
ROW(A1) (COLUMN(A1)-1)*3)
行函數返回A1參考的行號,即1。
列函數返回A1參考的列號,也為1。減去1將其變成零。並乘以0乘3給出0。
然後,您添加了1行返回的1個,結果為0返回,結果獲得1。
這樣,目的地範圍(D8)左上方單元格中的索引公式經歷了這種轉換:
INDEX($D$4:$J$4, ,ROW(A1) (COLUMN(A1)-1)*3))
更改為
INDEX($D$4:$J$4, ,1)
並從指定數組的第一列返回值,即D4中的“蘋果”。
當將公式複製到細胞D9時,相對細胞參考基於行的相對位置變化,而絕對范圍參考則保持不變:
INDEX($D$4:$J$4,, ROW(A2) (COLUMN(A2)-1)*3))
變成:
INDEX($D$4:$J$4,, 2 (1-1)*3))
變成:
INDEX($D$4:$J$4,, 2))
並從指定數組的第二列返回值,即E4中的“杏”。
IF函數檢查行號,如果它大於您指定的行數(在我們的情況下為3)返回一個空字符串(“”),否則索引函數的結果:
IF(ROW(A1)>3, "", INDEX(…))
最後,IFERROR函數修復了#REF!當將公式複製到更多的單元格時,發生的錯誤。
將列轉換為2D範圍的第二個公式具有相同的邏輯。不同之處在於,您使用行列組合來找出索引的row_num參數。在這種情況下,不需要COL_NUM參數,因為源數組中只有一個列。
包裹替代品的替代品365- 2010年
為了將一維數組中的值包裝到Excel 2019和更早的行中的行中,您可以使用以下替代Wraprows函數的替代方案。
將行轉換為2D範圍:
ifError(if(列(a1)> n ,“”,index( row_range ,column(a1)(row(a1)-1)* n )),“”),“”)將列更改為2D範圍:
ifError(if(列(a1)> n ,“”,index( column_range ,column(a1)(row(a1)-1)* n )),“”),“”)其中n是每個行的最大值數。
在我們的示例數據集中,我們使用以下公式將單行範圍(D4:J4)轉換為三柱範圍。公式降落在細胞D8中,然後在3列和3行中復制。
=IFERROR(IF(COLUMN(A1)>3, "", INDEX($D$4:$J$4, , COLUMN(A1) (ROW(A1)-1)*3)), "")
要將1列範圍(B4:B20)重塑為5列範圍,請在D14中輸入以下公式,然後將其拖動5列和4行。
=IFERROR(IF(COLUMN(A1)>5, "", INDEX($B$4:$B$20, COLUMN(A1) (ROW(A1)-1)*5)), "")
在Excel 365中,可以通過等效的包裹公式可以實現相同的結果:
=WRAPROWS(D4:J4, 3, "")
和
=WRAPROWS(B4:B20, 5, "")
這些公式如何工作
本質上,這些公式像上一個示例一樣工作。區別在於您如何確定索引函數的row_num和col_num坐標:
INDEX($D$4:$J$4,, COLUMN(A1) (ROW(A1)-1)*3))
要在目標範圍(D8)中獲取左上方單元格的列號,請使用此表達式:
COLUMN(A1) (ROW(A1)-1)*3)
這更改為:
1(1-1)*3
並給出1。
結果,以下公式從指定數組的第一列返回值,即“蘋果”:
INDEX($D$4:$J$4,, 1)
到目前為止,結果與上一個示例相同。但是,讓我們看看其他細胞中會發生什麼……
在細胞D9中,相對細胞引用變化如下:
INDEX($D$4:$J$4,, COLUMN(A2) (ROW(A2)-1)*3))
因此,公式轉化為:
INDEX($D$4:$J$4,, 1 (2-1)*3))
變成:
INDEX($D$4:$J$4,, 4))
並從指定數組的第四列返回值,即G4中的“櫻桃”。
IF函數檢查列號,如果它大於您指定的列數,請返回一個空字符串(“”),否則索引函數的結果:
IF(COLUMN(A1)>3, "", INDEX(…))
作為最後的觸摸,iFerror可以防止#REF!如果將公式複製到實際所需的單元格還要多的單元格中,則出現在“額外”單元格中的錯誤。
Wrapcols或Wraprows功能不起作用
如果您的Excel中沒有“包裝”功能或導致錯誤,則最有可能是以下原因之一。
#姓名?錯誤
在Excel 365中,#Name?可能會發生錯誤,因為您拼寫了函數的名稱。在其他版本中,這表明不支持功能。作為解決方法,您可以使用Wrapcols替代方案或Wraprows替代方案。
#價值!錯誤
如果向量參數不是一維數組,則會發生#Value誤差。
#num!錯誤
如果WRAP_COUNT值為0或負數,則會發生#NUM錯誤。
#灑!錯誤
最常見的是,#spill誤差表明沒有足夠的空白細胞將結果溢出。清除相鄰的細胞,它將消失。如果錯誤持續存在,請查看#spill在Excel中的意思以及如何修復它。
這就是如何使用包裹和包裹功能將一維範圍轉換為Excel中的二維數組的方法。我感謝您閱讀,並希望下週在我們的博客上見到您!
練習工作簿下載
Wrapcols和Wraprows功能 - 示例(.xlsx文件)
以上是將列 /行轉換為excel中的數組:wrapcols&Wraprows功能的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱門文章

熱門文章

熱門文章標籤

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)