2013-11-20 8 views
27

Ich muss eine Zelle mit dem ersten nicht leeren Eintrag in einer Reihe von Spalten (von links nach rechts) in der gleichen Zeile füllen - ähnlich wie in SQL mit coalesce().Gibt es in Excel eine Koaleszenz-ähnliche Funktion?

Im folgende Beispiel Blatt

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

Ich möchte A eine solche Zellfunktion in jeder Zelle der Reihe setzen, dass ich bekommen:

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

Ich weiß, dass ich dies mit einem tun könnte Kaskade von IF-Funktionen, aber in meinem realen Blatt habe ich 30 Spalten zur Auswahl, so würde ich mich freuen, wenn es einen einfacheren Weg gäbe.

Antwort

34
=INDEX(B2:D2,MATCH(FALSE,ISBLANK(B2:D2),FALSE)) 

Dies ist eine Array-Formel. Drücken Sie nach Eingabe der Formel CTRL + Shift + Geben Sie ein, damit Excel sie als Array-Formel auswertet. Dies gibt den ersten nicht leeren Wert des angegebenen Zellenbereichs zurück. Für Ihr Beispiel wird die Formel in der Spalte mit der Überschrift eingegeben „a“

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

Oder wenn Sie einzelne Zellen vergleichen wollen, können Sie eine Coalesce Funktion in VBA 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 ruf es in Excel an. In Ihrem Beispiel wäre die Formel in A1 sein:

=Coalesce(B1, C1, D1) 
1

Unter den VBA-Ansatz einen Schritt weiter, ich habe es wieder geschrieben, um eine Kombination aus beiden (oder beide) einzelne Zellen und Zellbereiche 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 

So, jetzt in Excel Sie eine der folgenden Formeln in A1 verwenden:

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

Sollte dies nicht eine Bearbeitung Ihrer ursprünglichen Antwort sein? – moggi

0

innerhalb des Arrays die Variablen eingeben, die nicht erlaubt sind.

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 
Verwandte Themen