Séparation d'une string dans Excel VBA

J'ai une série (milliers et milliers) d'loggings d'appels sur lesquels j'essaie de créer une feuille de calcul. Ils sont tous dans un file text. Le format ressemble à ceci:

12/ 13/ 05 Syracuse, NY 10: 22 AM 111- 111- 1111 2 $ - $ - $ - 12/ 13/ 05 New York, NY 10: 28 AM 111- 111- 1111 (F) 2 $ - $ - $ - 12/ 13/ 05 Orlando, FL 10: 48 AM 111- 111- 1111 (F) 4 $ - $ - $ - 3/ 9/ 09 Internal 4: 51 PM 111- 111- 1111 (E) 23 $ - $ - $ - 10/ 14/ 11 Colorado Site 8: 12 AM 111- 111- 1111 14 $ - $ - $ - 1/ 3/ 12 Dept 27 3: 16 PM 111- 111- 1111 (F) 93 $ - $ - $ - 11/ 12/ 12 Internal 3: 13 PM 18765 (E) 16 $ - $ - $ - 11/ 14/ 12 Internal 11: 43 AM John Doe 3 $ - $ - $ - 

Mois / jour / année / ville appelée, ÉTAT HH: MM APM 123- 456 7890 Facultatif Coefficient $ Montant $ Taxe Total

Ceci est, less les détails, directement à partir du file. Pas de guillemets sur les strings, pas d'tabs. J'ai essayé d'utiliser le text dans les colonnes, mais certaines villes ont de l'espace et d'autres ne le font pas.

Quelqu'un veut-il me diriger dans la bonne direction? RegEx peut-être (dont j'ai entendu parler mais jamais utilisé)? Autre chose?

Mise à jour: Merci pour les commentaires anticipés. La ligne sont des données réelles de mon file, même si j'ai dépouillé les numéros de téléphone et de ville. Je me suis mis à jour avec les informations de la ville pour y montrer la variance. Au mieux, je vois, aucun nom de la ville n'a une virgule, mais je count près de 120 000 lignes par an et, évidemment, je n'ai pas vérifié toutes.

La ville n'aura pas toujours, évidemment, un espace – Syracuse plus loin, New York, cependant. Le mois et la date, aussi, ne sont pas toujours de 2 numbers – ce qui jette également des chèques pour la longueur. Je peux lire d'abord, puis deuxième barre oblique, cependant – ceux-ci sont fixés après la date et les valeurs du mois.

Et le code entre parenthèses n'apparaît pas toujours … parfois il est là, parfois pas, bien qu'ils semblent ne jamais être une seule lettre quand ils arrivent.

J'espère que cela efface certaines choses. Cela aurait été beaucoup plus facile s'il était correctement enregistré. Soupir.

Mises à jour 2,3 et 4 Ajout de quelques lignes à partir des modifications du journal des appels par request de Robin.

Je sais que vous avez demandé une solution VBA, mais je fais mon parsing d'logging d'appel uniquement dans une feuille de calcul avec des formules.

J'ai téléchargé une solution de classur ici (version 3) .

Une fois que vous avez ouvert le classur, copyz et collez le contenu de votre file text dans la cellule A2 . Ensuite, complétez la gamme B2:X2 autant que nécessaire.

Les formules fonctionneront avec toute variation de la durée du mois, du jour, de l'année, de la ville, de l'état, de l'heure, du code, de la taxe, de l'impôt et du total.

Faites-moi savoir si des lignes se brisent. Vous pouvez facilement vérifier cela en utilisant la list déroulante AutoFiltre dans les en-têtes pour sélectionner des erreurs / valeurs étrangères. Ajouter vos lignes offensantes à votre question.

Mises à jour:

La version 2 prend en charge la situation où le champ Ville contient un nom d'location et le champ État est vierge.

La version 3 prend en charge la situation où le champ Numéro de téléphone contient un numéro de post ou un nom.

Quelque chose comme ça pourrait fonctionner s'il n'y a pas de virgule dans le nom de la ville.

 Sub foo() thisLine = "12/ 13/ 05 City Name, ST 10: 28 AM 111- 111- 1111 (F) 2 $ - $ - $ -" thisDate = Mid(thisLine, 1, 10) thisLine = Mid(thisLine, 12) firstComma = InStr(1, thisLine, ",") City = Mid(thisLine, 1, firstComma - 1) thisLine = Mid(thisLine, firstComma + 2) State = Left(thisLine, 2) thisLine = Mid(thisLine, 4) thisTime = Left(thisLine, 9) thisLine = Mid(thisLine, 11) thisPhone = Left(thisLine, 14) thisLine = Mid(thisLine, 16) tempArray = Split(thisLine, "$") If UBound(tempArray) = 3 Then optionalCode = tempArray(0) charge = "$" & tempArray(1) tax = "$" & tempArray(2) Total = "$" & tempArray(3) Else ' throw an error something went wrong End If End Sub