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.
=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
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)
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.
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)
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