2016-06-22 46 views
1

我想5列合併成一個單一的一個是這樣的:聯合5列到一個Excel中

1 4 7 10 13 
2 5 8 11 14 
3 6 9 12 15 

這個

1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 

我有這個公式,我努力適應它,但它未能:(

= IF(ROW()< = COUNTA(A:A),INDEX(A:A,ROW()),IF(ROW()< = COUNTA(A: B),INDEX(B:B,ROW() - COUNTA(A:A )),IF(ROW()> COUNTA(A:C),「」,INDEX(C:C,ROW() - COUNTA(A:B)))))

該語句使用3個IF的功能,因爲它需要3列組合在一起:

  1. 對於塔A中,功能的單元的行數與 比較不爲空細胞在A柱的總數。如果 結果爲true,則該函數將返回位於row()處的列A的 單元格的值。如果結果爲假,功能 將轉到下一個IF語句。
  2. 對於列B,該函數將單元格的行號與A:B範圍內非空單元格的總數 進行比較。如果結果爲 爲true,則函數返回列B中不爲空的第一個單元格的值。如果爲false,則函數將移至下一個IF 語句。
  3. 對於列C,該函數將單元格的行號與A:C範圍內非空單元格的總數 進行比較。如果結果爲 ,則該函數返回一個空白單元格,並且不會再執行 計算。如果爲false,則該函數返回第C列中第一個非空的單元格的值。

您有任何想法嗎?

回答

0

我測試了你的公式,它的工作方式和預期的一樣,但可能是你將公式放置在公式中引用的其中一列中,這將創建一個循環引用。

換句話說,嘗試在不是A,B或C的列中使用公式,看看會發生什麼。

旁註:對於你要實現的目標,我會建議試圖生產VBA宏相反,你的公式可以得到很長,繁瑣當您添加越來越多列,其中一個簡單的宏會讓你用任意數量的列做這樣的事情。

0

只要結果與原始數據不在同一行或列中(並且可能在另一個工作表上),則可以使用以下公式。另外,如果第一行或第一列中有空單元格,則公式將失敗。

=IFERROR(INDEX($A$1:$E$3,MOD(ROWS($1:1)-1,COUNTA($A:$A))+1,INT((ROWS($1:1)-1)/COUNTA($A:$A))+1),"") 

row論點和論據columnINDEX功能,如果你逗它拆開,你會發現他們返回的參數的正確順序。但是,您可以將任意數量的列或行添加到數組中。

如果你想數組定義爲任意大,因此,如果您真正陣列可以在無需改變配方,然後,在另一個工作表(例如Sheet2中),其中myArtray,例如擴大, Sheet1!$A$1:$Z$100,嘗試:

=IFERROR(IF(INDEX(myArray,MOD(ROWS($1:1)-1,COUNTA(Sheet1!$A:$A))+1,INT((ROWS($1:1)-1)/COUNTA(Sheet1!$A:$A))+1)="","", 
INDEX(myArray,MOD(ROWS($1:1)-1,COUNTA(Sheet1!$A:$A))+1,INT((ROWS($1:1)-1)/COUNTA(Sheet1!$A:$A))+1)),"") 
0

您可以在代碼模塊

Public Function OneDimensionalRange(source As Range) 
    Dim index As Integer 
    index = Application.Caller.Row 
    OneDimensionalRange = source.Cells(index).value 
End Function 

這將是可供使用的工作表函數粘貼此。

= OneDimensionalRange($ A $ 3:$ E $ 3)