MS Access 03 - normalizzazione dei dati da un foglio di calcolo di Excel
-
18-09-2019 - |
Domanda
Ho una domanda su un metodo per rompere qualcosa a parte. Ottengo questo foglio di calcolo Excel che mi fornisce i dati che ho bisogno di fare un rapporto. La sua avanti abbastanza semplice e diretto, tuttavia v'è una particolare parte di essa che mi sta dando un po 'di dolore.
Nel foglio di calcolo Excel c'è una colonna che elenca "le parti coinvolte" in una colonna. Di solito è di circa 12 nomi di persone separati da virgole, ma ha anche OrgID tra parentesi dietro di esso:
Joe Smith (DIV32), John Doe (DIV12), Roger Andrews (DIV14, DIV67, DIV01), etc
e ho bisogno di rompere questi in singole colonne in modo che essi saranno in singoli campi una volta li ho importare in accesso. Io so come "Testo in colonne" in Excel, ma questo ottenere avvitato quando jon doe
(DIV13, DIV54, ecc), ha più di una divisione.
Non è sicuro come fare questo nell'accesso ma ci piacerebbe sapere.
Chiunque ha sia una formula di Excel, o un metodo di accesso per questo favore?
Soluzione
Presumo si sta importando questo nella vostra base di dati. In caso contrario, è probabilmente più facile se lo fai, anche se è temporanea; e rifatta ogni volta che si deve eseguire il report
Si sta andando a finire con l'avere tre tabelle per rappresentare questa situazione
- theParty (persona)
- theOrganisation
- thePartyOrg
theParty con ha una colonna ID
theOrganisation avrà di essa la propria colonna ID
thePartyOrder avrà di essa la propria colonna ID, uno per theParty, e uno per theOrganisation
Ogni volta che si vuole rappresentare una parte come portare un membro di e organizzazione, è necessario assicurarsi che il partito esiste / è stato creato; l'Organizzazione esiste / è creato, e la gallina creare una voce nella tabella thePartyOrg che punta a entrambi.
Poiché queste informazioni di connessione appena memorizzato come testo all'interno di una singola colonna, è probabilmente una più facile da leggere prima il tutto in una tabella di gestione temporanea e quindi analizzare quella colonna in VBA
Altri suggerimenti
Ecco una soluzione:
ho scritto una funzione che sostituisce tutte le occorrenze di una stringa strFind da strReplace, ma solo se si verifica strFind tra parentesi. Così è possibile sostituire tutti i "" personaggi da qualcos'altro (ad esempio '*'), quindi eseguire il testo di Excel alle colonne, quindi sostituire il '*' 's con '' di nuovo.
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
Quindi i passaggi sono:
1) copiare questo macro in un modulo nella cartella di lavoro di Excel
2) Diciamo che la stringa è nella colonna R. Nella colonna B, impostare la funzione di sostituire le virgole come questo
= replace_paren (A1, "", "*")
3) riempire la formula nella colonna
4) Copia e incolla la colonna come valori
5) il testo di Utilizzare Excel per le colonne per analizzare la colonna utilizzando "" come delimitatore
6) Utilizzare replace_paren nuovo per sostituire tutte le occorrenze di "*" da ""