web-dev-qa-db-fra.com

Fractionner le contenu d'une ligne en plusieurs lignes?

J'ai une table où chaque ligne contient des données comme celle-ci:

 Nom de l'équipe | Premier membre | Deuxième membre | Troisième membre | Description de l'équipe 

Serait-il possible de transformer/casser ces données afin que chaque ligne ne contienne qu'un seul membre? Comme ça:

 Nom de l'équipe | Premier membre | Description de l’équipe 
 Nom de l’équipe | Deuxième membre | Description de l’équipe 
 Nom de l’équipe | Troisième membre | Description de l'équipe 
7
Dom Delimar

Vous pouvez transformer les colonnes en utilisant TRANSPOSE, c'est-à-dire en supposant que "premier membre, deuxième membre, troisième membre" sont A1: A3, vous pouvez utiliser la fonction quelque part,

 = TRANSPOSE(A1:A3)

remplira la colonne comme ci-dessous,

 First member
 Second member
 Third member

Pour répéter la colonne avant et après les membres de l’équipe, vous pouvez essayer,

 = TRANSPOSE (SPLIT(REPT(CONCAT(A1, ","), COUNTA(A1:A3)), ","))
 = TRANSPOSE (SPLIT(REPT(CONCAT(A5, ","), COUNTA(A1:A3)), ","))

qui répètent la colonne avec une virgule separater, puis divisent et transforment le tableau de résultats.

5
neo

Utilisez les fonctionnalités de gestion du groupe Google Sheets et FILTER pour obtenir le résultat souhaité.

=FILTER({A:A,B:B,E:E;A:A,C:C,E:E;A:A,D:D,E:E},LEN({A:A;A:A;A:A}))

Remarque: Si vous utilisez une feuille de calcul, utilisez la virgule , comme séparateur décimal, remplacez la virgule dans la formule ci-dessus par une barre oblique inversée \

2
Rubén

Si vous utilisez le script Google Apps suivant, cela se fera automatiquement:

function SPLIT() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();  
  var sh0 = ss.getSheets()[0], sh1 = ss.getSheets()[1];

  // get data from sheet 1
  var data = sh0.getDataRange().getValues();

  // create array to hold data
  var aMain = new Array();

  // itterate through data and add to array
  for(var i=1, dLen=data.length; i<dLen; i++) {
    for(var j=1; j<4; j++) {
      aMain.Push([data[i][0],data[i][j],data[i][4]]);
    }
  }

  // add array of data to second sheet
  sh1.getRange(2, 1, aMain.length, 3).setValues(aMain);
}

J'ai préparé un exemple de fichier: SPLIT. À l'ouverture, un élément de menu supplémentaire sera créé avec deux options.

Vous devez modifier le script pour qu'il fonctionne dans votre feuille. Ajoutez le script via l'option de menu Outils , Editeur de script

1
Jacob Jan Tuinstra
=ARRAYFORMULA(QUERY(TRIM(SPLIT(TRANSPOSE(SPLIT(QUERY(TRANSPOSE(QUERY(TRANSPOSE(
 IF(LEN(A1:A), "♠"&A1:A&"♦"&B1:D&"♦"&E1:E, )), , 999^99)), , 999^99), 
 "♠")), "♦")), "where Col2 is not null"))

0

0
user0

Pour ajouter à l'excellente solution de Rubén, la modification suivante de sa formule ignorera les utilisateurs vides et les groupes par équipes:

=QUERY(FILTER({A:A,B:B,E:E;A:A,C:C,E:E;A:A,D:D,E:E},LEN({A:A;A:A;A:A})),"Select * Where Not Col2='' Order by Col1 Asc")

0
Erik Tyler