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