Division d'une adresse en différentes cellules

-1

J'ai colonne de adressée dans ce format:

120 Lemon Street Columbus OH 92738 (Basketball Courts)

Et je dois le scinder en: adresse postale (120 Lemon Street), ville (Columbus), Etat (OH), code postal (92738) et description ((Basketball Courts))

Est-ce qu'il y a un moyen de faire ça? Tous sont dans le même état, donc ce n'est pas un problème. Ils sont dans différentes villes / villages et ont différents codes postaux.

Si vous savez seulement comment en faire une partie, faites-le moi savoir. Toute aide est la bienvenue, merci!

user1282637
la source
1
Eh bien, c’est un peu difficile à faire à moins d’avoir certaines choses en place. Par exemple, votre nom de rue est-il toujours composé de deux mots avec un espace entre (Lemon Street)? Votre ville est-elle toujours un mot? Fondamentalement, vous devez rechercher un motif ou insérer un délimiteur dans votre entrée que vous pouvez séparer.
Eric F
Qu'as-tu déjà essayé? Est-ce que VBA est OK?
Mr. Mascaro
@EricF Ils ne sont pas le même nombre de mots pour la rue ou la ville, c'est pourquoi j'ai des difficultés. Une chose à laquelle je peux penser est de vérifier chaque fois qu'il y a des mots tels que "Avenue, Rue, Ruelle", etc. Mais je ne suis pas sûr que ce soit une bonne méthode ou non
user1282637
Même avec VBA, vous aurez besoin d’un motif ou d’une table que vous référencez.
Eric F
2
Vous demandez beaucoup ici. Fractionner un texte non délimité de cette manière revient à formuler des règles basées sur des régularités dans votre ensemble de données spécifique. D'après mon expérience, il y a beaucoup d'essais et d'erreurs - essayer une règle générale, trouver des exceptions à cette règle, puis incorporer un autre niveau à la règle pour intercepter les exceptions, etc. Sans réduire le problème, il sera difficile pour quiconque, sans accès à vos données spécifiques, de vous aider.
Excellll

Réponses:

2

Utilisateur1282637, j'ai mis en place un exemple à vous montrer ci-dessous. Je l'ai seulement fait pour être un point de départ afin que vous puissiez terminer avec votre propre réponse complète.

Tout d'abord, j'ai mis en place deux listes. L'une était constituée de toutes les abréviations d'état et l'autre, de tous les suffexes de rue acceptés, que j'ai trouvés ici:

http://pe.usps.com/text/pub28/28apc_002.htm

enter image description here

J'ai utilisé la formule que j'ai énumérée simplement pour convertir la liste en commençant par une majuscule, puis le reste en minuscules, comme si vous aviez écrit le vôtre.

Ensuite, il suffit de regarder ce qui s’applique.

enter image description here

Cette partie pourrait être faite de plusieurs manières mais j'ai choisi cette voie pour un exemple. Il va simplement énumérer un nombre dans la ligne correspondante qui trouve une correspondance pour le suffixe utilisé.

Je sépare la partie (terrains de basket) en utilisant la parenthèse:

enter image description here

J'affiche ce qui reste car dans votre cas, "tribunaux" de "tribunaux de basket" est également un suffixe de rue:

enter image description here

Ensuite, je dois trouver combien de temps dure la chaîne qui correspond au suffixe de rue. J'utilise donc les éléments suivants:

enter image description here

et ça...

enter image description here

et enfin cela me permet d'afficher uniquement la rue:

enter image description here

Maintenant, je n'ai pas fait la ville et l'état, mais en suivant cette idée, vous pouvez y parvenir. De plus, si vous souhaitez une option plus propre, vous devez absolument vous renseigner davantage sur VBA. J'espère que cela vous apprendra au moins quelques idées sur la façon de s'y prendre.

Eric F
la source
0

User1282637 demande s'il existe un moyen d'accomplir cette tâche et demande de l'aide pour le faire. Le problème, ce n’est pas tant la mécanique Excel que la manière de traiter l’ambiguïté des données. L'analyse du code postal et de la description est simple (à moins que vous ne combiniez des codes ZIP à 5 et 9 chiffres). Le problème difficile est de séparer la rue de la ville, alors je vais me concentrer sur cela. Cela ne constitue pas une procédure étape par étape avec les formules Excel. Il s'agit simplement de partager un aperçu du problème et de décrire une approche permettant d'obtenir un résultat pour le plus difficile.

Le problème est qu'il n'y a pas de délimiteurs entre les différents champs. Ce n'est pas un problème pour enlever la description ou ZIP car ceux-ci sont facilement identifiables. Le problème consiste à déterminer où la rue se termine et la ville commence. Considérez ces variations dans la portion Street (loin d’une liste exhaustive):

120 Lemon Street
120 Lemon Drop Street
120 Lemon Street NW
120 East Lemon Street
120 Lemon Street Apt 3

Le nombre de "mots" dans la rue peut varier de 1 ou 2 à 7 ou 8, ce qui n'est pas utile pour l'analyse. La rue "type" n'est pas particulièrement utile. Il y a de l'ordre de 50-100 mots utilisés uniquement pour le type de rue (rue, avenue, boulevard, voie, péage, voie, cour, cercle, terrasse, etc.). Combinez cela avec l'utilisation d'abréviations pour le type de rue, à la fois correct et incorrect, et la liste est dans les centaines. De plus, cette désignation n'est pas toujours le dernier mot dans le champ de la rue. La rue étant la partie la plus difficile à identifier, l'approche logique consiste donc à identifier le reste, le reste étant la rue.

La ville peut être plusieurs mots. Washington Court House, OH est trois mots. Ensuite, considérons des situations comme St Marys, OH. Le "St" fait-il partie du nom de la ville ou d’une désignation de type de rue; dans quel domaine va-t-il? Ou Sud Euclid, OH - "Sud" fait-il partie du nom de la ville ou est-il une direction faisant partie de l'adresse de la rue? La ville a ses problèmes mais il existe un moyen de les résoudre.

Même en utilisant le code postal pour identifier la ville a des problèmes. Il n'y a pas toujours de correspondance 1: 1 entre le nom de la ville et le code postal.

Le moyen le plus pratique d’attaquer le problème consiste à utiliser des "dictionnaires": une liste de villes et un répertoire ZIP Code. Ce sont la partie la plus non ambiguë de l'adresse. Ceux-ci peuvent être trouvés en ligne ou du service postal. Pour faire des comparaisons, vous devrez peut-être nettoyer vos données ou les listes. Ils auront besoin du même style de capitalisation et tout espace supplémentaire dans vos données empêchera une correspondance exacte.

Si vos données ou la liste utilise des abréviations, vous devrez vous en occuper. Vous pouvez soit traduire l’abréviation non abrégée en abréviations standard, soit effectuer une correspondance secondaire avec un dictionnaire d’abréviations (également disponible en ligne ou au service postal), lorsque ces différences sont trouvées.

Le ZIP peut être facilement analysé, et c'est un bon point de départ. Effectuez une recherche de code postal dans le répertoire de codes postaux. Si le résultat correspond exactement à une chaîne de mots précédant immédiatement le ZIP, cela identifie la partie de l'enregistrement qui est le champ de la ville.

S'il n'y a pas de correspondance exacte ou non ambiguë, passez à une comparaison des noms de ville. Parcourez la liste des noms de ville. Pour chaque nom, déterminez le nombre de mots qu'il contient et comparez-le au nombre de mots précédant immédiatement le ZIP.

Si vous obtenez une correspondance par l'un ou l'autre processus, tout ce qui reste à gauche de la ville correspond à l'adresse de la rue.

Ce type d'application est beaucoup plus facile à faire avec une application de base de données qu'avec un tableur. Quoi qu'il en soit, vous pouvez voir que tenter de le faire de manière automatisée n’est pas une tâche simple. Vous ne pouvez pas le faire avec quelques formules de tableur.

Quelle que soit la rigueur de votre programmation, il est probable que vous ayez toujours des enregistrements que vous devez analyser manuellement et des erreurs que vous devez corriger manuellement. Vous n'indiquez pas combien d'enregistrements vous avez. Cela peut être moins de travail de simplement le faire manuellement.

Si le nombre est grand et que je devais le faire, je choisirais la liste. Faites correspondre les enregistrements faciles, tels que les correspondances ZIP non ambiguës. Ensuite, laissez la quantité de données régir la progression de la programmation des correspondances automatisées.

Pour les enregistrements laissés, en supposant que vous ayez déjà retiré le ZIP et sa description, voici un moyen d’accélérer le processus manuel. Regardez le dossier et identifiez visuellement le nombre de "mots" dans la ville, ce qui est une tâche mentale rapide. Entrez cela dans une cellule prescrite et utilisez une formule pour diviser la rue de la ville en fonction du nombre d'espaces (séparez à la Nième espace où N = nombre total d'espaces + 1 - nombre de mots du nom de la ville).

fixer1234
la source
-1

Essayez ceci. Cette approche simple devrait vraiment fonctionner si vous pouvez vivre avec le fait d'avoir l'adresse et la ville dans la même cellule. J'ai une formule pour extraire la ville si ce n'est qu'un mot, mais cela devient beaucoup plus complexe si vous utilisez des villes contenant plusieurs mots (par exemple, New York).

Des formules ... Adresse & amp; Ville: = GAUCHE (A2, FIND ("OH", A2) -1) Etat: = MID (A2, FIND ("OH", A2), 2) - vous avez mentionné que tout est OH, je l'ai donc gardé simple Zip: = MID (A2, FIND ("OH", A2) +3,5) Description: = TRIM (MID (A2, FIND ("OH", A2) +8,30))

https://onedrive.live.com/redir?page=view&resid=D91C36B074F4D0F6!3224&authkey=!AO_MbW7Qxv4yWDo

enter image description here

Petr Fedorov
la source
1
Vous devriez poster les formules réelles ici aussi. Je sais personnellement que je n'aime pas aller aux liens externes postés par les gens.
Eric F
-2

Code:

Sub SplitAddress()
    Dim Addr As String
    Dim l As Integer
    Dim Desc As String
    Dim Zip As String
    Dim State As String
    Dim City As String

    Addr = Selection

    l = InStrRev(Addr, "(")
    Desc = Right(Addr, Len(Addr) - l + 1)

    Addr = Left(Addr, InStrRev(Addr, " ", l) - 1)

    l = InStrRev(Addr, " ")
    Zip = Right(Addr, Len(Addr) - l)

    Addr = Left(Addr, InStrRev(Addr, " ", l) - 1)

    l = InStrRev(Addr, " ")
    State = Right(Addr, Len(Addr) - l)

    Addr = Left(Addr, InStrRev(Addr, " ", l) - 1)

    l = InStrRev(Addr, " ")
    City = Right(Addr, Len(Addr) - l)

    Addr = Left(Addr, InStrRev(Addr, " ", l) - 1)

    Selection.Offset(0, 1) = Addr
    Selection.Offset(0, 2) = City
    Selection.Offset(0, 3) = State
    Selection.Range("B11").Offset(0, 4) = Zip
    Selection.Range("B11").Offset(0, 5) = Desc
End Sub

Explication: presse Alt+F11 et collez le code ci-dessus dans le widndow qui apparaît. Sélectionnez ensuite une cellule contenant l'adresse et revenez à la fenêtre dans laquelle vous avez collé le code, puis appuyez sur F5.

Si cela fonctionne, nous pouvons travailler à le rendre plus spécifique à votre situation spécifique.

Mr. Mascaro
la source
@ Raystafarian, je pense que vous avez mal interprété la question. L'OP dit que les données sont toujours dans le format fourni. Le format en question est délimité par des blancs.
Mr. Mascaro
1
Qu'en est-il des villes de deux mots? Des villes à trois mots?
Excellll
@ Excellent, aucune solution pour les données non supprimées ne sera parfaite, mais ce sera plus proche que la réponse que vous avez envoyée.
Mr. Mascaro
1
Eh bien, il peut soit être délimité, soit faire référence à une table, comme ma réponse l’a fait. Je suppose que cela dépend de la façon dont le PO veut le gérer. J'ai répondu en utilisant des formules car il ne semblait pas comprendre ce que VBA était, et pourtant seul l'écrivait.
Eric F
2
@ jbarker2160 Je n'ai pas posté de réponse.
Excellll