Excel中是否有类似合并的功能?

新手上路,请多包涵

我需要用同一行中一组列(从左到右)中的第一个非空条目填充一个单元格 - 类似于 SQL 中的 coalesce() 。

在以下示例表中

---------------------------------------
|     |  A   |   B   |   C   |    D   |
---------------------------------------
|  1  |      |   x   |   y   |    z   |
---------------------------------------
|  2  |      |       |   y   |        |
---------------------------------------
|  3  |      |       |       |    z   |
---------------------------------------

我想在 A 行的每个单元格中放置一个单元格函数,这样我会得到:

 ---------------------------------------
|     |  A   |   B   |   C   |    D   |
---------------------------------------
|  1  |  x   |   x   |   y   |    z   |
---------------------------------------
|  2  |  y   |       |   y   |        |
---------------------------------------
|  3  |  z   |       |       |    z   |
---------------------------------------

我知道我可以使用级联的 IF 函数来做到这一点,但在我的真实工作表中,我有 30 列可供选择,所以如果有更简单的方法,我会很高兴。

原文由 Fabian 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 818
2 个回答
=INDEX(B2:D2,MATCH(FALSE,ISBLANK(B2:D2),FALSE))

这是一个数组公式。输入公式后,按 CTRL + Shift + Enter 让 Excel 将其计算为数组公式。这将返回给定单元格范围的第一个非空白值。对于您的示例,公式在标题为“a”的列中输入

    A   B   C   D
1   x   x   y   z
2   y       y
3   z           z

原文由 Howard Renollet 发布,翻译遵循 CC BY-SA 3.0 许可协议

晚会并利用@AndyMC 的答案,您可以使用以下内容来评估 vlookups、index(match()) 等来合并您的公式语句。

 Public Function Coalesce(ParamArray Fields() As Variant) As Variant

    Dim v As Variant

    For Each v In Fields

        If Not IsError(v) Then

            Coalesce = v

            Exit Function
        End If
    Next
    Coalesce = CVErr(xlErrNA)

End Function

并在您的工作表中使用它,如下所示: =Coalesce(INDEX(SHEET1!$A:$AF,MATCH(Main!$Q36,SHEET1!$I:$I,0),MATCH(Main!D$34,SHEET1!$1:$1,0)),INDEX(SHEET2!A:CR,MATCH(Main!$Q36,SHEET2!$M:$M,0),MATCH("SOMETHING",SHEET2!$1:$1,0)))

对于第一个不返回 #N/A 的语句,它将返回实际匹配的值。

原文由 Maeaex1 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题