Y a-t-il une fonction semblable à coalesce dans Excel?

je dois remplir une cellule avec la première entrée non vide dans un ensemble de colonnes (de gauche à droite) dans la même rangée-similaire à coalesce() en SQL.

Dans l'exemple suivant feuille

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

je veux mettre une cellule en fonction dans chaque cellule de la ligne telle que je reçois:

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

je sais que je pourrais le faire avec une cascade de fonctions SI, mais dans ma vraie feuille, j'ai 30 colonnes à choisir, donc je serais heureux s'il y avait une façon plus simple.

30
demandé sur Fabian 2013-11-20 22:22:49

4 réponses

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

C'est une Formule de Tableau. Après avoir entré la formule, appuyez sur CTRL+ Maj+ Entrée pour que Excel l'évalue comme une formule de tableau. Ceci renvoie la première valeur non-bloquante de la gamme donnée de cellules. Pour votre exemple, la formule est entrée dans la colonne avec de l'en-tête "a"

    A   B   C   D
1   x   x   y   z
2   y       y   
3   z           z
39
répondu Howard Renollet 2014-12-16 22:01:38

Ou si vous voulez comparer les différentes cellules, vous pouvez créer un Fusionnent fonction en 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

et ensuite l'appeler en Excel. Dans votre exemple, la formule A1 serait:

=Coalesce(B1, C1, D1)
5
répondu AndyMc 2017-08-31 21:21:04

en allant un peu plus loin dans L'approche VBA, Je l'ai réécrit pour permettre une combinaison des deux (ou l'un ou l'autre) cellules individuelles et plages de cellules:

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

donc maintenant dans Excel vous pouvez utiliser n'importe laquelle des formules suivantes dans A1:

=Coalesce(B1, C1, D1)
=Coalesce(B1, C1:D1)
=Coalesce(B1:C1, D1)
=Coalesce(B1:D1)
1
répondu AndyMc 2017-09-06 04:54:15

dans le tableau, entrez les variables qui ne sont pas autorisées.

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
répondu Felipe 2017-12-15 13:39:46