7 votes

Transformer une ligne en plusieurs lignes dans Excel

J'ai plusieurs articles qui sont disponibles dans plusieurs plates-formes (c'est-à-dire une relation de plusieurs à plusieurs). Il y a actuellement une ligne par article, avec une colonne pour chaque plate-forme. Une cellule de la ligne de l'article X et la colonne pour la plate-forme Y est marqué du code de la plate-forme Y si l'article X y est disponible et vide dans le cas contraire. Un article comportant plusieurs plateformes aura plusieurs codes de plateforme (dans leurs colonnes respectives). La feuille actuelle se présente donc comme suit

    |   A    |         B         |*|                      S-AJ                      |
1   |  ID #  |   Description     |…|              Distribution Centers              |
2   |   17   |   Ginkgo Biloba   |…|      |      |      |      |      |      |  SE  |
3   |   42   |   Ginseng         |…|      |  MP  |  MS  |      |  NW  |      |      |

Colonnes C à travers R contiennent d'autres attributs des articles, tels que le code UPC, le coût et le prix, qui ne sont pas pertinents pour cette question. Ma feuille réelle comporte 18 plates-formes, couvrant les colonnes suivantes S à travers AJ ; j'ai réduit ce chiffre pour que l'exemple tienne dans la fenêtre de Stack Exchange.

J'ai besoin d'une seule colonne de plate-forme, avec un seul code de distribution par ligne, puis de dupliquer les lignes si nécessaire pour les articles qui contiennent actuellement plusieurs codes. Le résultat devrait ressembler à ceci :

    |   A    |         B         |*|   S  |
1   |  ID #  |   Description     |…|  DC  |
2   |   17   |   Ginkgo Biloba   |…|  SE  |
3   |   42   |   Ginseng         |…|  MP  |
4   |   42   |   Ginseng         |…|  MS  |
5   |   42   |   Ginseng         |…|  NW  |

où les cellules A3:R3 , A4:R4 y A5:R5 contiennent les mêmes informations.

La seule façon de procéder, qui prendrait beaucoup de temps, serait de copier le numéro de l'article dans plusieurs lignes ; et dans la colonne qui contient le code de distribution, je changerais le code pour l'article qui est disponible dans chaque centre de distribution. Je ferai cela pour 900 articles. Existe-t-il une méthode plus simple ?

7voto

Scott Points 20468
  1. Créer une nouvelle feuille. Copiez la ou les lignes d'en-tête, la largeur des colonnes et les formats, sauf qu'il ne faut pas copier les colonnes T - AJ . Il peut être plus facile de copier la feuille entière, puis de supprimer toutes les lignes autres que la ligne 1 et de dissocier les colonnes S - AJ .

  2. Tout d'abord, nous voulons répliquer chaque ligne de l'article de Sheet1 sur Sheet2 18 fois - une fois pour chaque centre de distribution. Type de produit =INDEX(Sheet1!A:A, INT((ROW()-2)/18)+2, 1) & "" en Sheet2!A2INT((ROW()-2)/18)+2 les cartes des lignes 2 à 19 sur Sheet2 à la ligne 2 sur Sheet1 , rangées 20-37 sur Sheet2 à la ligne 3 sur Sheet1 , etc. Les & "" provoque l'affichage par Excel d'une fenêtre vide lorsqu'il fait référence à une cellule vierge dans Sheet1 . Si vous n'avez pas d'espaces vides dans la rubrique Sheet1 vous pouvez ne pas le faire. Si vous n'aimez pas cette solution particulière, vous pouvez utiliser l'une des autres solutions de Affichage d'une cellule vierge lors d'une référence à une cellule vierge dans Excel .

    Faites glisser/remplir cette cellule vers la droite, jusqu'à la cellule R2 .

  3. Entrer =INDEX(Sheet1!$S:$AJ, INT((ROW()-2)/18)+2, MOD(ROW()-2, 18)+1) en Sheet2!S2 . Cela fait référence à la même ligne dans Sheet1 comme dans la formule ci-dessus, mais Sheet2!S2 obtient la valeur de Sheet1!S2 , Sheet2!S3 obtient la valeur de Sheet1!T2 , Sheet2!S4 obtient la valeur de Sheet1!U2 , etc. L'écran affiche 0 pour les blancs.

  4. Sélectionner la ligne entière A2:S2 et faites glisser/remplir vers le bas pour obtenir toutes vos données. Le nombre de lignes devra être 18 fois supérieur à celui que vous avez sur Sheet1 ; soit 18×900=16200.

  5. Copier l'ensemble des Sheet2 et coller les valeurs.

  6. Colonne de filtrage S . Afficher uniquement les zéros. Effacer toutes les lignes (autres que la ligne 1). Supprimer le filtre.

Fait.

0voto

Akshata Points 1

Plus facile à résoudre, mais avec plus d'efforts manuels : Copier les identifiants uniques x nombre de fois (où x est le nombre de colonnes à convertir en lignes) pour chaque itération appliquer le vlookup avec la colonne à convertir en lignes à chaque fois.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X