web-dev-qa-db-fra.com

Recherchez et placez dans une colonne, la première cellule non vide de chaque ligne d'une plage de colonnes

J'essaie de créer un ARRAYFORMULA qui peut extraire la première valeur de cellule non vide sur chaque ligne d'une plage de colonnes.

Ma dernière tentative est la suivante:

=TRANSPOSE(QUERY(TRANSPOSE( A2:D6),"select * where Col1 <>'' limit 1",9^99))

Placé dans F2, cela génère toute la sortie de la plage F2:F6 dans le tableau ci-dessous.

Cependant, il est tout à fait évident que tout ce qu'il fait permet de concaténer toutes les cellules de chaque colonne en utilisant un espace comme délimiteur, de sorte que la sortie ne ressemble pas à mon résultat attendu, indiqué dans H2:H6 :-(

J'ai trouvé plusieurs autres formules, mais toutes présentent le même problème. :-(

 ┌───────┬───────┬───────┬───────┬───────┬───┬ ────────────────┬───┬──────────┐ 
 │ │ A │ B │ C │ D │ E │ F │ G │ H │ 
 ├───────┼───────┼───────┼───────┼──────── ┼───┼────────────────┼───┼──────────┤ 
 │ 1 │ Entrée │ Entrée │ Entrée │ Entrée │ │ Formule/Sortie │ │ Attendue │ 
 ├───────┼───────┼───────┼───────┼─ ──────┼───┼────────────────┼───┼──────────┤ 
 │ 2 │ Test0 │ │ Test1 │ │ │Test0 Test1 │ │ Test0 │ 
 ├───────┼───────┼───────┼───────┼──────── ┼───┼────────────────┼───┼──────────┤ 
 │ 3 │ │ │ │ │ │ │ │ │ 
 ├───────┼───────┼───────┼───────┼┼───────┼─ ──┼────────────────┼───┼──────────┤ 
 │ 4 │ │ │ │ Test3 │ │ Test3 │ │ Test3 │ 
 ├───────┼───────┼───────┼───────┼───────┼┼ ───┼────────────────┼───┼──────────┤ 
 │ 5 │ │ 5 │ │ │ │ 5 │ │ 5 │ 
 ├───────┼───────┼────────┼───────┼──── ───┼───┼────────────────┼───┼──────────┤ 
 │ 6 │ │ │ 54: 74 = 2│ │ │ 54: 74 = 2 │ │ 54: 74 = 2 │ 
 └───────┴────────┴──────── ┴───────┴───────┴───┴────────────────┴───┴──────── ──┘ 

Donc, ma question est, comment puis-je faire une matrice de tableau ou une requête que je peux placer dans F2 qui sélectionnera uniquement la première valeur non vide de chaque ligne parmi F2:D6 et afficher le résultat dans F2:F6?

1
fsteff

La formule qui vous donnerait les résultats souhaités serait:

=ArrayFormula(REGEXREPLACE(ARRAYFORMULA(TRANSPOSE(TRIM(SPLIT(CONCATENATE(IF(LEN(B3:H8),B3:H8&"★",)&REPT(" "&"♣︎",COLUMN(B3:H3)=COLUMN(H3))),"♣︎")))),"([^★]+).+","$1"))

Il est un peu alambiqué mais fonctionne bien.

1
marikamitsos

Essayer

=iferror(QUERY(transpose(A2:D2),"Select Col1 where Col1 is not null limit 1",0),"")

0
Tedinoz