Combinez 5 colonnes en une seule dans Excel

Je veux merge 5 colonnes en une seule comme celle-ci:

1 4 7 10 13 2 5 8 11 14 3 6 9 12 15 

pour ça

 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 

J'ai cette formule et j'essaie de l'adapter, mais ça échoue 🙁

= IF (ROW () <= COUNTA (A: A), INDEX (A: A, ROW ()), IF (ROW () <= COUNTA (A: B), INDEX (B: B, ROW () – COUNTA (A: A)), IF (ROW ()> COUNTA (A: C), "", INDEX (C: C, ROUE () – COUNTA (A: B)))))

L'instruction utilise 3 fonctions IF, car elle doit combiner 3 colonnes:

  1. Pour la colonne A, la fonction compare le nombre de lignes d'une cellule avec le nombre total de cellules dans une colonne qui n'est pas vide. Si le résultat est vrai, la fonction renvoie la valeur de la cellule de la colonne A qui est à la ligne (). Si le résultat est faux, la fonction passe à la prochaine instruction IF.
  2. Pour la colonne B, la fonction compare le numéro de ligne d'une cellule avec le nombre total de cellules dans la plage A: B qui ne sont pas vides. Si le résultat est vrai, la fonction renvoie la valeur de la première cellule qui n'est pas vide dans la colonne B. Si false, la fonction passe à la prochaine instruction IF.
  3. Pour la colonne C, la fonction compare le nombre de lignes d'une cellule avec le nombre total de cellules en plage A: C qui ne sont pas vides. Si le résultat est vrai, la fonction renvoie une cellule vide et ne fait plus de calcul. Si false, la fonction renvoie la valeur de la première cellule qui n'est pas vide dans la colonne C.

As tu des idées?

J'ai testé votre formule et cela fonctionne comme prévu, il se pourrait toutefois que vous mettiez votre formule dans l'une des colonnes que vous faites reference dans votre formule qui créera une reference circulaire.

En d'autres termes, essayez d'utiliser votre formule dans une colonne qui n'est pas A, B ou C et voyez ce qui se passe.

Note latérale: pour ce que vous essayez d'atteindre, je reorderais d'essayer de produire une macro VBA à la place, votre formule pourrait être assez longue et fiddly à mesure que vous ajoutez de plus en plus de colonnes où, en tant que simple macro, vous permettrait de faire quelque chose comme ça avec n'importe quel le nombre de colonnes.

Vous pouvez coller ceci dans un module de code

 Public Function OneDimensionalRange(source As Range) Dim index As Integer index = Application.Caller.Row OneDimensionalRange = source.Cells(index).value End Function 

Il sera disponible pour une fonction de feuille de calcul.

= OneDimensionalRange ($ A $ 3: $ E $ 3)

Vous pouvez utiliser la formule suivante tant que vos résultats ne sont pas dans la même ligne ou colonne que datatables d'origine (et pourraient être sur une autre feuille de calcul). En outre, la formule échouerait s'il y avait des cellules vides dans la première ligne ou la première colonne.

 =IFERROR(INDEX($A$1:$E$3,MOD(ROWS($1:1)-1,COUNTA($A:$A))+1,INT((ROWS($1:1)-1)/COUNTA($A:$A))+1),"") 

L'argument de la row et l'argument de la column pour la fonction INDEX , si vous le déchirez, vous verrez qu'ils renvoient la séquence d'arguments appropriée. Toutefois, vous pouvez append n'importe quel nombre de colonnes ou de lignes au tableau.

Si vous souhaitez définir le tableau comme étant arbitrairement grand, donc si votre réseau réel peut se développer sans devoir modifier la formule, alors, sur une autre feuille de calcul (p. Ex. Sheet2), où myArtray est, par exemple, Sheet1!$A$1:$Z$100 , essayez:

 =IFERROR(IF(INDEX(myArray,MOD(ROWS($1:1)-1,COUNTA(Sheet1!$A:$A))+1,INT((ROWS($1:1)-1)/COUNTA(Sheet1!$A:$A))+1)="","", INDEX(myArray,MOD(ROWS($1:1)-1,COUNTA(Sheet1!$A:$A))+1,INT((ROWS($1:1)-1)/COUNTA(Sheet1!$A:$A))+1)),"")