在Excel中将5列组合成一个列

我想把5列合并成一个像这样的单个列:

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的单元格值。 如果结果为false,则函数转到下一个IF语句。
  2. 对于列B,该函数将单元格的行号与A:B范围内非空单元格的总数进行比较。 如果结果为true,则函数返回列B中第一个非空的单元格的值。如果为false,则函数将转到下一个IF语句。
  3. 对于列C,该函数将单元格的行号与A:C范围内非空单元格的总数进行比较。 如果结果为真,该函数返回一个空白单元格,不再进行任何计算。 如果为false,则函数返回列C中非空的第一个单元格的值

你有什么想法?

我已经testing了你的公式,它的工作方式和预期的一样,可能是你将公式放在你的公式中引用的一列中,这将创build一个循环引用。

换句话说,尝试在不是A,B或C的列中使用公式,看看会发生什么。

附注:对于你想要达到的目标,我会build议尝试生成一个VBAmacros,而你的公式可能会变得相当长和繁琐,因为你添加了越来越多的列,作为一个简单的macros可以让你做这样的事情列数。

您可以将其粘贴到代码模块中

 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)

只要您的结果与原始数据不在同一行或列中(可能在另一个工作表上),则可以使用以下公式。 此外,如果第一行或第一列中有空单元格,则公式将失败。

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

INDEX函数的row参数和column参数,如果你把它分开,你会看到它们返回正确的参数序列。 但是,您可以将任意数量的列或行添加到数组中。

如果要将数组定义为任意大,那么如果数组可以在不更改公式的情况下进行扩展,那么在另一个工作表(例如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)),"")