MS Access 03 - La normalización de datos desde una hoja de cálculo Excel
-
18-09-2019 - |
Pregunta
Tengo una pregunta acerca de un método para romper algo aparte. Consigo esta hoja de cálculo de Excel que me proporciona datos que tengo que hacer un informe. Es bastante simple y directo, sin embargo hay una parte particular de lo que me está dando una cierta pena.
En la hoja de cálculo de Excel hay una columna que enumera "partes implicadas" en una columna. Por lo general, es de unos 12 nombres de las personas separadas por comas, sino que también ha OrgID entre paréntesis detrás de él:
Joe Smith (DIV32), John Doe (DIV12), Roger Andrews (DIV14, DIV67, DIV01), etc.
y tengo que romper estas en columnas individuales para que puedan ser campos individuales una vez que importarlos en el acceso. Sé cómo "Texto en columnas" en Excel, pero esto se joden cuando jon doe
(DIV13, DIV54, etc), tiene más de una división.
No está seguro de cómo hacer esto en el acceso, pero les gustaría saber.
Alguien tiene o bien una fórmula de Excel, o método de acceso para esto, por favor?
Solución
Asumo que va a importar esto en su base de datos. Si no es así, es probable que sea más fácil si lo hace, incluso si es temporal; y hecho de nuevo cada vez que tenga que ejecutar el informe
Lo que vas a llegar a tener tres tablas para representar esta situación
- theParty (persona)
- theOrganisation
- thePartyOrg
theParty con tiene una columna de ID
theOrganisation tendrá su propia columna ID
thePartyOrder tendrá su propia columna de ID, una para theParty, y otro para theOrganisation
Cada vez que desee representar a una parte como traer a un miembro de la Organización y, usted tiene que asegurarse de que el partido existe / se crea; existe la organización / es creado, y la gallina crear una entrada en la tabla thePartyOrg que apunta a ambos.
Debido a que esta información de conexión que acaba de almacenar como texto dentro de una sola columna, que es probablemente una más fácil de leer primero todo en una tabla de ensayo y luego procesarla y columna en VBA
Otros consejos
Aquí hay una solución:
He escrito una función que reemplaza todas las apariciones de una cadena strFind por strReplace, pero sólo si se produce strFind entre paréntesis. Por lo que puede sustituir a todos los "" caracteres por otra cosa (por ejemplo, '*'), a continuación, ejecute el texto de Excel para columnas, vuelva a colocar la '*' 's con '' de nuevo.
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
Así que los pasos son:
1) copiar esta macro en un módulo en el libro de Excel
2) Supongamos que la cadena está en la columna A. En la columna B, configurar la función de reemplazar las comas como este
= replace_paren (A1, "", "*")
3) Llenar la fórmula hacia abajo la columna
4) Copiar y pegar la columna como valores
5) el texto de Uso de Excel para columnas para analizar la columna usando "" como delimitador
6) Use replace_paren nuevo para reemplazar todas las ocurrencias de "*" por ""