web-dev-qa-db-fra.com

Comment convertir une matrice en une seule colonne à l'aide d'Excel

J'ai la matrice suivante dans Excel:

3 colonnes: A, B, C

Rangée 1: a b c

Rangée 2: d e f

Rangée 3: ghi

Ce dont j'ai besoin, c'est une colonne unique avec toutes ces valeurs. Le résultat devrait ressembler à ça:

une

b

c

e

f

g

h

je

La fonction TRANSPOSE ne fonctionne pas pour ce cas. J'ai essayé la fonction INDIRECT, mais je n'ai pas trouvé de solution. Je préférerais plutôt le manipuler avec des formules Excel standard qu'avec un makro.

Des idées?

9
Sebastian

Disons que nous avons:

enter image description here

Dans E1 entrez:

=INDEX($A$1:$C$3,ROUNDUP(ROW()/3,0),IF(MOD(ROW(),3)=0,3,MOD(ROW(),3)))

et copier pour obtenir:

enter image description here



En utilisant des formules similaires, vous pouvez mapper n’importe quel tableau à deux dimensions dans une seule ligne ou une seule colonne. Il est également facile de mapper une seule colonne ou une seule ligne dans un tableau.

6
Gary's Student

Les réponses ci-dessus sont assez bonnes, mais à mon humble avis, la solution fournie par Chip Pearson ici ( http://www.cpearson.com/Excel/TableToColumn.aspx ), est supérieure à bien des égards puisqu'elle est immédiatement/automatiquement:

1) Détermine elle-même les valeurs de délimitation des rangées/colonnes et fonctionne immédiatement pour les valeurs rectangulaires, par ex. au-dessus, il faut entrer explicitement 3 pour num Cols et 3 pour num Rows, et doit également déterminer lequel est lequel. Considérant que la solution de Pearson le fait automatiquement (par exemple, le commentaire/la préoccupation de rmf ci-dessus).

2) Pearson propose les deux variantes pour Col-order et Row-ranged.

1
DrOli

Cela figurait déjà au point 2 du très général

Excel: Formules de conversion de données entre colonnes/lignes/matrices :

La cellule supérieure de votre plage cible (par exemple, $H$1) devrait contenir

=INDEX($A$1:$C$3,INT((ROW()-ROW($H$1))/3)+1,MOD(ROW()-ROW($H$1),3)+1)

$A$1:$C$3 indique vos données source . Copiez la formule si nécessaire.

Vous pouvez aussi utiliser

=OFFSET($A$1,INT((ROW()-ROW($H$1))/3),MOD(ROW()-ROW($H$1),3))

comme mentionné dans l'article cité.

1
sancho.s