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
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.
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 \
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
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")