有没有在Excel中聚结样的功能?

问题描述 投票:38回答:5

我需要填写的小区,其同一行中的一组列的第一个非空条目(从左至右) - 类似于合并()的SQL。

在以下例子中片

---------------------------------------
|     |  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列从选择,所以我会很高兴,如果有一个简单的方法。

sql excel xls coalesce
5个回答
45
投票
=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

10
投票

我用了:

=IF(ISBLANK(A1),B1,A1)

这个测试,如果你想使用的第一个字段为空,然后用其他的。您可以使用“嵌套如果”当你有多个字段。


7
投票

或者,如果你想比较各个细胞,你可以创建一个VBA函数COALESCE:

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

    Dim v As Variant

    For Each v In Fields
        If "" & v <> "" Then
            Coalesce = v
            Exit Function
        End If
    Next
    Coalesce = ""

End Function

然后调用它在Excel中。在您的例子在A1中的公式应该是:

=Coalesce(B1, C1, D1)

3
投票

服用VBA方法更进一步,我已经重新写入它,以允许两个(或任一)单个细胞和细胞范围的组合:

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

    Dim Cell As Variant
    Dim SubCell As Variant

    For Each Cell In Cells
        If VarType(Cell) > vbArray Then
            For Each SubCell In Cell
                If VarType(SubCell) <> vbEmpty Then
                    Coalesce = SubCell
                    Exit Function
                End If
            Next
        Else
            If VarType(Cell) <> vbEmpty Then
                Coalesce = Cell
                Exit Function
            End If
        End If
    Next
    Coalesce = ""

End Function

所以,现在在Excel中,你可以使用任何在A1以下公式:

=Coalesce(B1, C1, D1)
=Coalesce(B1, C1:D1)
=Coalesce(B1:C1, D1)
=Coalesce(B1:D1)

0
投票

数组里面输入是不允许的变量。

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

    Dim v As Variant

    For Each v In Fields
        If IsError(Application.Match(v, Array("", " ", 0), False)) Then
            Coalesce = v
            Exit Function
        End If
    Next
    Coalesce = ""

End Function
© www.soinside.com 2019 - 2024. All rights reserved.