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