在Excel中将5列合并为一列

时间:2016-06-22 09:59:57

标签: excel

我想将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()&LT = COUNTA(A:A),INDEX(A:A,ROW()),IF(ROW()&LT = 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范围内非空的单元格总数。如果结果 如果是,则函数返回第一个不是的单元格的值 列B中为空。如果为false,则函数继续执行下一个IF 言。
  3. 对于C列,该函数将单元格的行号与 A:C范围内非空的单元格总数。如果结果 如果是这样,该函数返回一个空白单元格,不再执行任何操作 计算。如果为false,则该函数返回第一个的值 C列中非空的单元格。
  4. 你有什么想法吗?

4 个答案:

答案 0 :(得分:0)

我已经测试了您的公式并且它按预期工作,但可能是您将公式放在公式中引用的列之一中,这将创建循环引用。

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

旁注:对于你想要实现的目标,我建议尝试生成一个VBA宏,当你添加越来越多的列作为一个简单的时候,你的公式会变得非常冗长和繁琐宏可以让你用任意数量的列做这样的事情。

答案 1 :(得分: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参数和column函数的INDEX参数,如果你把它分开,你会看到它们返回正确的参数序列。但是,您可以向数组添加任意数量的列或行。

如果你想将数组定义为任意大,那么如果真实数组可以扩展而不必更改公式,那么,在另一个工作表上,(例如Sheet2),其中{{ 1}}例如是myArtray,请尝试:

Sheet1!$A$1:$Z$100

答案 2 :(得分: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)

答案 3 :(得分:-1)

这是我要求的S所需的公式。

=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)),IF(ROW()<=COUNTA(A:D),INDEX(D:D,ROW()-COUNTA(A:C)),IF(ROW()<=COUNTA(A:E),INDEX(E:E,ROW()-COUNTA(A:D)),IF(ROW()<=COUNTA(A:F),INDEX(F:F,ROW()-COUNTA(A:E)),IF(ROW()<=COUNTA(A:G),INDEX(G:G,ROW()-COUNTA(A:F)),IF(ROW()<=COUNTA(A:H),INDEX(H:H,ROW()-COUNTA(A:G)),IF(ROW()<=COUNTA(A:I),INDEX(I:I,ROW()-COUNTA(A:H)),IF(ROW()<=COUNTA(A:J),INDEX(J:J,ROW()-COUNTA(A:I)),IF(ROW()<=COUNTA(A:K),INDEX(K:K,ROW()-COUNTA(A:J)),IF(ROW()<=COUNTA(A:L),INDEX(L:L,ROW()-COUNTA(A:K)),IF(ROW()<=COUNTA(A:M),INDEX(M:M,ROW()-COUNTA(A:L)),IF(ROW()<=COUNTA(A:N),INDEX(N:N,ROW()-COUNTA(A:M)),IF(ROW()<=COUNTA(A:O),INDEX(O:O,ROW()-COUNTA(A:N)),IF(ROW()<=COUNTA(A:P),INDEX(P:P,ROW()-COUNTA(A:O)),IF(ROW()<=COUNTA(A:Q),INDEX(Q:Q,ROW()-COUNTA(A:P)),IF(ROW()<=COUNTA(A:R),INDEX(R:R,ROW()-COUNTA(A:Q)),IF(ROW()>COUNTA(A:S),"",INDEX(S:S,ROW()-COUNTA(A:R)))))))))))))))))))))