MS Access 03 - Normaliser données à partir d'une feuille de calcul Excel
-
18-09-2019 - |
Question
J'ai une question sur une méthode pour casser quelque chose à part. Je reçois cette feuille de calcul Excel qui me fournit des données que je dois faire un rapport. Son avant assez simple et droite, mais il y a une partie particulière de celui-ci qui me donne une certaine douleur.
Dans la feuille de calcul Excel il y a une colonne qui répertorie les « parties concernées » dans une colonne. Il est habituellement d'environ 12 noms des personnes séparées par des virgules, mais a également OrgID entre parenthèses derrière:
smith joe (de DIV32), John Doe (DIV12), Roger Andrews (DIV14, DIV67, DIV01), etc
et je dois briser en colonnes individuelles afin qu'ils seront les champs individuels une fois que je les importer dans l'accès. Je sais comment « texte à colonnes » dans Excel, mais cela se faire défoncer quand jon doe
(DIV13, DIV54, etc.), a plus d'une division.
Je ne sais pas comment faire en matière d'accès, mais aimerait savoir.
Quelqu'un at-il soit une formule Excel, ou méthode d'accès pour cette s'il vous plaît?
La solution
Je suppose que vous importez ceci dans votre base de données. Dans le cas contraire, il est probablement plus facile si vous le faites, même si elle est temporaire; et refait à neuf chaque fois que vous devez exécuter le rapport
Vous allez finir par avoir trois tables pour représenter cette situation
- theParty (personne)
- theOrganisation
- thePartyOrg
theParty avec une colonne ont ID
theOrganisation aura son propre colonne ID
thePartyOrder aura son propre colonne d'identité, un pour theParty, et un pour theOrganisation
Chaque fois que vous voulez représenter une partie comme mettre un membre et d'organisation, vous devez vous assurer que le parti existe / est créé; l'Organisation existe / est créé, et la poule créer une entrée dans la table thePartyOrg qui pointe à la fois.
Parce que ces informations de connexion simplement stockées sous forme de texte dans une seule colonne, il est probablement plus facile à lire tout d'abord dans une table de mise en scène, puis Parse cette colonne dans VBA
Autres conseils
Voici une solution:
J'ai écrit une fonction qui remplace toutes les occurrences d'une chaîne strfind par strReplace, mais seulement si strfind entre parenthèses se produit. Ainsi, vous pouvez remplacer tous les « » caractères par quelque chose d'autre (par exemple « * »), puis exécutez le texte Excel à colonnes, puis remplacez le « * » 's avec « » à nouveau.
Function replace_paren(strSource As String, strFind As String, strReplace As String) As String
' Within strString, replaces any occurrence of strFind with strReplace *IF* strFind occurs within parentheses '
Dim intOpenParenIndex As Integer
Dim intCloseParenIndex As Integer
Do
intOpenParenIndex = InStr(intCloseParenIndex + 1, strSource, "(")
intCloseParenIndex = InStr(intOpenParenIndex + 1, strSource, ")")
If intOpenParenIndex = 0 Then
Exit Do
End If
Mid(strSource, intOpenParenIndex, intCloseParenIndex - intOpenParenIndex) = Replace(Mid(strSource, intOpenParenIndex, intCloseParenIndex - intOpenParenIndex), strFind, strReplace)
Loop
replace_paren = strSource
End Function
Ainsi, les étapes sont:
1) copier cette macro dans un module dans votre classeur Excel
2) Disons que votre chaîne est dans la colonne A. Dans la colonne B, mis en place la fonction de remplacer les virgules comme celui-ci
= replace_paren (A1, "", "*")
3) Remplir la formule dans la colonne
4) Copier et coller la colonne en tant que valeurs
5) le texte Utilisez Excel pour colonnes pour analyser la colonne à l'aide « » comme séparateur
6) Utiliser de nouveau replace_paren pour remplacer toutes les occurrences de "*" en ""