2013-11-20 32 views
27

Ho bisogno di riempire una cella con la prima voce non vuota in un insieme di colonne (da sinistra a destra) nella stessa riga - simile a coalesce() in SQL.Esiste una funzione simile alla coalesce in Excel?

Nel seguente foglio di esempio

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

voglio mettere una funzione delle cellule in ogni cella della riga A tale che mi metterò:

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

So che avrei potuto fare questo con un cascata di funzioni IF, ma nel mio foglio reale, ho 30 colonne tra cui selezionare, quindi sarei felice se ci fosse un modo più semplice.

risposta

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

Questa è una formula di matrice. Dopo aver inserito la formula, premere CTRL + Maiusc + Immettere affinché Excel lo valuti come una formula di matrice. Questo restituisce il primo valore non vuoto dell'intervallo di celle specificato. Per il vostro esempio, la formula viene immessa nella colonna con l'intestazione "a"

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

Oppure, se si desidera confrontare le singole celle, è possibile creare una funzione di Coalesce in VBA:

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 

E quindi chiamalo in Excel. Nel tuo esempio la formula in A1 sarebbe:

=Coalesce(B1, C1, D1) 
1

Prendendo l'approccio VBA un passo ulteriore, ho riscritto per permettere una combinazione di entrambi (o entrambi) singole celle e intervalli di celle:

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 

Così ora in Excel è possibile utilizzare uno dei seguenti formule in A1:

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

Non dovrebbe essere una modifica sulla risposta originale? – moggi

0

All'interno della matrice immettere le variabili che non sono consentiti.

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 
Problemi correlati