2009-07-21 9 views
0

J'ai une question sur une méthode pour séparer quelque chose. Je reçois cette feuille de calcul Excel qui me fournit les données dont j'ai besoin pour faire un rapport. C'est assez simple et direct, mais il y en a une partie qui me donne du chagrin.MS Access 03 - Normaliser des données à partir d'une feuille de calcul Excel

Dans la feuille de calcul Excel, une colonne énumère les «parties impliquées» dans une colonne. Il est habituellement d'environ 12 noms des personnes séparées par des virgules, mais il a aussi OrgID entre parenthèses derrière elle:

smith Joe (de DIV32), john doe (DIV12), roger andrews (DIV14, DIV67, DIV01), etc

et j'ai besoin de les décomposer en colonnes individuelles afin qu'elles soient des champs individuels une fois que je les ai importés en accès. Je sais comment "text to columns" dans Excel, mais cela se fout quand jon doe (DIV13, DIV54, etc), a plus d'une division.

Vous ne savez pas comment faire cela en accès, mais vous aimeriez savoir.

Quelqu'un at-il soit une formule Excel, ou une méthode d'accès pour cela s'il vous plaît?

Répondre

1

Je suppose que vous importez ceci dans votre base de données. Sinon, c'est probablement plus facile si vous le faites, même si c'est temporaire; et refaits chaque fois que vous devez exécuter le rapport

Vous allez finir par avoir trois tables pour représenter cette situation

  1. theParty (personne)
  2. theOrganisation
  3. thePartyOrg

theParty avec une colonne ID

theOrganisation l'aura ' s 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éée et crée une entrée dans la table thePartyOrg qui pointe sur les deux.

Parce que ces informations de connexion simplement stockées sous forme de texte dans une seule colonne, il est probablement plus facile d'abord lire tout dans une table de mise en scène, puis Parse cette colonne dans VBA

1

Voici une solution:

I 'ai écrit une fonction qui remplace toutes les occurrences d'une chaîne strFind par strReplace, mais seulement si strFind survient entre parenthèses. Vous pouvez donc remplacer tous les caractères "," par un autre (par exemple "*"), puis exécuter le texte d'Excel en colonnes, puis remplacer à nouveau les "*" par ",".

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 les suivantes:

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 similaires

= replace_paren (A1, "", "*")

3) Remplir la formule dans la colonne

4) Copie et collez la colonne comme valeurs

5) le texte Utilisez Excel pour colonnes pour analyser la colonne à l'aide « » comme séparateur

6) Utilisez replace_paren nouveau pour remplacer toutes les occurrences de « * » par « »

+0

Notez que le code est interrompu s'il existe des parenthèses imbriquées. – Emily

Questions connexes