web-dev-qa-db-fra.com

Existe-t-il une fonction de type 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 ligne - similaire à coalesce () en SQL. 

Dans la fiche d'exemple suivante

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

Je veux mettre une fonction de cellule dans chaque cellule de la ligne A telle que je vais obtenir:

---------------------------------------
|     |  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 parmi lesquelles choisir, alors je serais heureux s'il y avait un moyen plus simple. 

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

То формула массива. После ввода формулы нажмитеCTRL+Shift+Enterчтобы Excel оценил его как формулу массива. То возвращает первое непустое значение данного диапазона ячеек. Для вашего примера формула вводится в столбец с заголовком "а"

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

Ou, si vous souhaitez comparer des cellules individuelles, vous pouvez créer une fonction Coalesce dans 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 appelez-le dans Excel. Dans votre exemple, la formule en A1 serait:

=Coalesce(B1, C1, D1)
6
AndyMc

J'ai utilisé:

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

Ceci teste si le premier champ que vous souhaitez utiliser est vide, puis utilisez l’autre. Vous pouvez utiliser un "imbriqué si" lorsque vous avez plusieurs champs.

2
neil collins

En poussant l'approche VBA un peu plus loin, je l'ai réécrite pour permettre une combinaison de cellules individuelles ou de plages de cellules individuelles (ou l'une des deux):

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

Alors maintenant, dans Excel, vous pouvez utiliser l’une des formules suivantes dans A1:

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

Dans le tableau, entrez les variables non 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
Felipe