【问题标题】:Combine 5 columns into one in Excel在 Excel 中将 5 列合并为一列
【发布时间】:2016-10-24 04:44:46
【问题描述】:

我想像这样将 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:C),"",INDEX(C:C,ROW()-COUNTA(A:B))))))

该语句使用了 3 个 IF 函数,因为它需要合并 3 列:

  1. 对于 A 列,该函数将单元格的行号与 A 列中非空的单元格总数。如果 结果为真,函数返回单元格的值 位于 row() 的 A 列。如果结果为假,则函数 转到下一个 IF 语句。
  2. 对于 B 列,该函数将单元格的行号与 A:B 范围内不为空的单元格总数。如果结果 为真,函数返回第一个不是的单元格的值 B 列为空。如果为 false,则函数转到下一个 IF 声明。
  3. 对于 C 列,该函数将单元格的行号与 A:C 范围内不为空的单元格总数。如果结果 为真,该函数返回一个空白单元格并且不再执行任何操作 计算。如果为 false,则函数返回第一个值 C 列中非空的单元格。

你有什么想法吗?

【问题讨论】:

  • 给定的答案对你有用吗?

标签: excel


【解决方案1】:

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

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

如果您想将数组定义为任意大,那么如果您的 real 数组可以扩展而无需更改公式,那么在另一个工作表(例如 Sheet2)上,@987654325 @就是,比如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)),"")

【讨论】:

    【解决方案2】:

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

    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】:

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

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

      旁注:对于您要实现的目标,我建议您尝试生成一个 VBA 宏,当您添加越来越多的列时,您的公式可能会变得很长而且很繁琐宏可以让你对任意数量的列做这样的事情。

      【讨论】:

        【解决方案4】:

        这是我需要的直到 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)))))))))))))))))))))
        

        【讨论】:

          猜你喜欢
          • 2011-02-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-08-31
          • 1970-01-01
          • 2019-06-08
          • 2017-05-13
          相关资源
          最近更新 更多