Je veux diviser une cellule, réorganiser les pièces et recombiner. Par exemple:
| name | reordered name |
| Page,Larry | Larry Page |
| Brin,Sergey | Sergey Brin |
Je sais que =SPLIT(A2, ",")
divisera les valeurs dans les deux prochaines colonnes et je sais que je peux concaténer des valeurs avec =CONCATENATE(A2, " ", B2)
.
Comment puis-je réunir ces choses dans une seule formule?
Puis-je accéder aux valeurs de SPLIT
et les réorganiser?
Je sais que je peux faire =CONCATENATE(SPLIT(A2))
(mais évidemment c'est stupide).
Dans Ruby, je voudrais juste faire quelque chose comme:
def reorder_name(cell)
names = cell.split(",")
"#{names[1]} #{names[0]}"
end
Avec la fonction personnalisée suivante (comme vous êtes habitué à écrire en JavaScript), cela est également possible:
function myReverse(range) {
var output = [];
if(range[0].length > 1) {
throw ("function can only handle a column range");
} else {
for(var i in range) {
var name = range[i][0].split(",");
output.Push([name.reverse().join(" ")]);
}
}
return output;
}
La gestion des petites erreurs génère un message lorsque la plage contient plus d'une colonne. Fonctions similaires à ARRAYFORMULA
pour accepter les plages. Ajouter du code sous Outils, éditeur de script. Enregistrez le script et vous êtes prêt à partir!
La formule suivante fera également l'affaire:
=CONCATENATE(INDEX(SPLIT(A2, ","),1,2)," ",INDEX(SPLIT(A2, ","),1,1))
La fonction INDEX
vous permet de sélectionner des cellules particulières dans une plage CONTINUED
. Dans ce cas, vous souhaitez que le deuxième résultat de division apparaisse en premier, ainsi le ,1,2
, qui signifie première ligne, deuxième colonne du résultat de division.
J'ai préparé un exemple de fichier pour vous: scinder et réorganiser
Utilisez ces fonctions GSheet pour inverser l'ordre des mots dans une chaîne.
Écrivez dans la cellule A1 ="TRICK NO THIS IS"
et dans la cellule B1 =JOIN(" ";TRANSPOSE(SORT(TRANSPOSE(SPLIT(A1;" "));1;FALSE)))
Il crée _IS THIS NO TRICK
_ à partir de l'entrée de A1.
Lisez la formule de l'intérieur vers l'extérieur:
SPLIT
crée un tableau dans une rangée ("virtuel" si la formule est utilisée telle quelle) des mots de A1 séparés par des blancsTRANSPOSE
crée un tableau vertical à partir du tableau horizontalSORT
trie un tableau vertical, 1 = une seule colonne et FALSE
inverse l'ordreTRANSPOSE
crée à nouveau un tableau horizontal à partir du tableau vertical réordonnéJOIN
concatène le tableau horizontal de mots en une chaîne avec des blancs entre 2 dans B1.=CONCATENATE(MID(A1,FIND(",",A1)+1,999), " ",LEFT(A1,FIND(",",A1)-1))
Un type sur ce fil a posté comment récupérer les bits, je les ai juste emballés dans le concat.
Notez que le "+1" dans la partie +1 999 sera votre ajustement s'il y a des espaces ou non après la virgule. Étant donné que le vôtre n’a pas d’espace, je viens de le ramener à 1 au lieu de 2 comme dans la page référencée.
Il est également possible de scinder le prénom nom en deux colonnes, d'ajouter un séparateur de virgule et un ordre inverse. Très utile pour les écritures de paie de correction.
A B C
| firstname lastname | lastname | firstname |
| JOHN BROWN | BROWN, | JOHN |
| MARTHA GREEN | GREEN, | MARTHA |
dans la colonne B
=SPLIT(TRIM(MID($A1,FIND(" ",$A1,1)+1,100))
&", "& TRIM(LEFT($A1,FIND(" ",$A1,1)-1))," ",FALSE)
name reordered name
Page,Larry Larry Page
Brin, Sergey Sergey Brin
formule:
=index(split(A2, ","), 0, 2)&" "&index(split(A2, ","), 0, 1)
Egalement possible avec des expressions régulières:
=regexreplace(A1,"[A-z]+,","")&" "®exextract(A1,"\w*")