webentwicklung-frage-antwort-db.com.de

Gibt es in Excel eine Coalesce-ähnliche Funktion?

Ich muss eine Zelle mit dem ersten nicht leeren Eintrag in einer Reihe von Spalten (von links nach rechts) in derselben Zeile füllen - ähnlich wie in SQL mit coalesce (). 

Im folgenden Beispielblatt

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

Ich möchte eine Zellenfunktion in jede Zelle der Zeile A einfügen, sodass ich Folgendes bekomme:

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

Ich weiß, dass ich dies mit einer Kaskade von IF-Funktionen tun könnte, aber in meinem eigentlichen Blatt habe ich 30 Spalten zur Auswahl, daher wäre ich glücklich, wenn es einen einfacheren Weg gäbe. 

37
Fabian
=INDEX(B2:D2,MATCH(FALSE,ISBLANK(B2:D2),FALSE))

Это формула массива. После ввода формулы нажмитеCTRL+Shift+EnterWeitere Informationen zu Excel finden Sie unter. Это возвращает первое непустое значение данного диапазона ячеек. Для вашего примера формула водится в столбец с заголовком "а"

    A   B   C   D
1   x   x   y   z
2   y       y   
3   z           z
46
Howard Renollet

Wenn Sie einzelne Zellen vergleichen möchten, können Sie in VBA eine Coalesce-Funktion erstellen:

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

Und dann rufen Sie es in Excel auf. In Ihrem Beispiel wäre die Formel in A1:

=Coalesce(B1, C1, D1)
6
AndyMc

Ich benutzte:

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

Hiermit wird geprüft, ob das erste Feld, das Sie verwenden möchten, leer ist, und dann das andere. Sie können ein "verschachteltes if" verwenden, wenn Sie mehrere Felder haben.

2
neil collins

Um den VBA-Ansatz noch weiter zu gehen, habe ich ihn neu geschrieben, um eine Kombination von (oder einem) einzelnen Zellen und Zellbereichen zu ermöglichen:

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

In Excel können Sie nun eine der folgenden Formeln in A1 verwenden:

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

Geben Sie in das Array die nicht zulässigen Variablen ein.

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
0
Felipe