J'espère que cet exemple est clair. J'ai joué avec join
et filter
mais je ne peux pas obtenir le champ Résumé comme ci-dessous:
La rangée 1 contient une liste de sujets. La rangée 2 est l'allocation de matière d'un enseignant (calculée à partir d'une recherche). Je souhaite que la cellule Summary traite simplement chaque ligne. Si une cellule contient une valeur autre que zéro, prenez ce nombre et concaténez-le avec le sujet, puis passez à la fin de la liste.
Heureux d'essayer un script.
Avec le code suivant, vous pouvez préparer le résumé à votre guise.
function mySummary(header, range) {
var output1 = [];
for(var i=0, iLen=range.length; i<iLen; i++) {
var output2 = [];
for(var j=0, jLen=range[0].length; j<jLen; j++) {
var value = range[i][j];
if(value != "" || value > 0) {
output2.Push(value + " " + header[0][j]);
}
}
output1.Push([output2.sort().join(", ")]);
}
return output1;
}
La fonction personnalisée nécessite deux paramètres pour fonctionner avec: en-tête & range . La première itération ( var i = 0 ) gère les lignes et la seconde ( var j = 0 ) gère les colonnes. Chaque cellule sera évaluée pour des valeurs vides (""
) ou non nulles (> 0
). Lorsque l'un d'eux est true
, le résultat est placé dans un tableau intermédiaire (output2
). Lorsque la première ligne est terminée, le résultat combiné est trié, joint et poussé dans un nouveau tableau de sortie (output1
), avant de commencer par la deuxième ligne.
J'ai créé un exemple de fichier pour vous: Résumé spécial
Ajoutez le script sous Outils> Editeur de script et appuyez sur le bouton Enregistrer.
Avec la formule suivante, vous pouvez aussi le faire.
=JOIN(
", ", ==> delimiter join
TRANSPOSE(
SORT(
TRANSPOSE( ==> data sort
SPLIT(
JOIN( ==> data for split
",", ==> delimiter join
ARRAYFORMULA(
IF(
A2:D2<>"", ==> if statement
A2:D2 & " " & $A$1:$D$1, ==> true statement
"" ==> false statement
)
)
),
"," ==> delimiter split
)
),
1, ==> column index sort
TRUE ==> ascending or descending
)
)
)
copy/paste
=JOIN(", ",TRANSPOSE(SORT(TRANSPOSE(SPLIT(JOIN(",",ARRAYFORMULA(IF(A2:D2<>"",A2:D2 & " " & $A$1:$D$1, ""))),",")),1,TRUE)))
J'ai créé un exemple de fichier pour vous: Résumé spécial
La formule est assez longue, je dirais. L'ajout d'autres critères le rendra encore plus long. L'avantage est le recalcul rapide du résultat. Un inconvénient, malgré la ARRAYFORMULA
, est qu'il n'est pas possible d'adresser la plage comme dans la version du script.