Nous avons environ 3500 documents dont les noms de fichiers doivent être nettoyés manuellement pour supprimer les caractères spéciaux tels que les crochets, les deux-points, les points-virgules, les virgules, etc.
J'ai un fichier texte que j'ai vidé dans Excel, et j'essaie de créer une colonne qui marque le nom du fichier pour modification s'il comprend des caractères spéciaux. La formule du pseudocode serait
=IF (cellname contains [^a-zA-z_-0-9], then "1", else "0")
pour marquer la ligne si elle contient des caractères autres que AZ, 0-9, - ou _, quelle que soit la casse.
Quelqu'un sait quelque chose qui peut fonctionner pour moi? J'hésite à coder et à if
énoncer massivement s'il y a quelque chose de rapide et de facile.
Réponses:
Pas de code? Mais c'est tellement court, facile et beau et ... :(
Votre modèle RegEx
[^A-Za-z0-9_-]
est utilisé pour supprimer tous les caractères spéciaux dans toutes les cellules.Éditer
C'est aussi proche que possible de votre question initiale.
Le deuxième code est une fonction définie par l'utilisateur
=RegExCheck(A1,"[^A-Za-z0-9_-]")
avec 2 arguments. Le premier est la cellule à vérifier. Le second est le modèle RegEx à vérifier. Si le motif correspond à l'un des caractères de votre cellule, il renverra 1 sinon 0.Vous pouvez l'utiliser comme n'importe quelle autre formule Excel normale si vous ouvrez d'abord l'éditeur VBA avec ALT+ F11, insérez un nouveau module (!) Et collez le code ci-dessous.
Pour les utilisateurs novices de RegEx, je vais expliquer votre modèle:
[^A-Za-z0-9_-]
la source
=RegExReplace(cell)
n'est pas reconnue .... et je suis un peu rouillé sur la création de nouvelles fonctions.En utilisant quelque chose de similaire au code de nixda, voici une fonction définie par l'utilisateur qui retournera 1 si la cellule a des caractères spéciaux.
Les fonctions définies par l'utilisateur (UDF) sont très faciles à installer et à utiliser:
Si vous enregistrez le classeur, l'UDF sera enregistré avec. Si vous utilisez une version d'Excel postérieure à 2003, vous devez enregistrer le fichier sous .xlsm plutôt que .xlsx
Pour supprimer l'UDF:
Pour utiliser l'UDF à partir d'Excel:
= IsSpecial (A1)
Pour en savoir plus sur les macros en général, voir:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
et
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
et
http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx
pour des détails sur les FDU
Les macros doivent être activées pour que cela fonctionne !
la source
If sCh Like "[0-9a-zA-Z ]" Or sCh = "_" Then
que la macro suppose que les espaces sont des caractères valides?Voici une solution de mise en forme conditionnelle qui marquera les enregistrements avec des caractères spéciaux.
Appliquez simplement une nouvelle règle de mise en forme conditionnelle à vos données qui utilise la formule (extrêmement longue) ci-dessous, où se
A1
trouve le premier enregistrement dans la colonne des noms de fichiers:Cette formule vérifie chaque caractère de chaque nom de fichier et détermine si son code ASCII est en dehors des valeurs de caractères autorisées. Malheureusement, les codes de caractères autorisés ne sont pas tous contigus, c'est pourquoi la formule doit utiliser des sommes de
SUMPRODUCT
s. La formule renvoie le nombre de mauvais caractères. Toutes les cellules qui renvoient une valeur supérieure à 0 sont marquées.Exemple:
la source
J'ai utilisé une approche différente pour trouver des caractères spéciaux. J'ai créé de nouvelles colonnes pour chacun des caractères autorisés, puis j'ai utilisé une formule comme celle-ci pour compter le nombre de fois que le caractère autorisé était dans chaque entrée de ligne (Z2):
Ensuite, j'ai additionné le nombre de caractères autorisés dans chaque ligne, puis je l'ai comparé à la longueur totale de l'entrée de ligne.
Et enfin, j'ai trié sur la dernière colonne (BF2) pour trouver des valeurs négatives, ce qui m'a conduit aux colonnes à corriger.
la source