MS Access 03 - Dados Normalizing de uma planilha do Excel
-
18-09-2019 - |
Pergunta
Eu tenho uma pergunta sobre um método para quebrar algo à parte. Recebo esta planilha Excel que fornece me com os dados que eu preciso para fazer um relatório. É simples bonito e para a frente, no entanto, há uma parte específica do que está me dando algum sofrimento.
Na planilha Excel há uma coluna que lista "partes envolvidas" em uma coluna. É geralmente cerca de 12 nomes de pessoas separadas por vírgulas, mas também tem OrgID entre parêntesis por trás dele:
joe smith (DIV32), John Doe (DIV12), Roger Andrews (DIV14, DIV67, DIV01), etc
e eu preciso quebrar isso em colunas individuais de modo que eles serão campos individuais uma vez que eu importá-los para o acesso. Eu sei como "texto para colunas" no Excel, mas esta se ferrar quando jon doe
(DIV13, DIV54, etc), tem mais de uma divisão.
Não sei como fazer isso no acesso, mas gostaria de saber.
Alguém tem quer uma fórmula de excel, ou método de acesso para isso por favor?
Solução
Eu suponho que você está importando isso em seu banco de dados. Se não, é provavelmente mais fácil se você, mesmo que seja temporário; e refeita cada vez que você tem que executar o relatório
Você vai acabar por ter três tabelas para representar esta situação
- theParty (pessoa)
- theOrganisation
- thePartyOrg
theParty com ter uma coluna ID
theOrganisation terá a sua própria coluna ID
thePartyOrder terá a sua própria coluna ID, um para theParty, e um para theOrganisation
Sempre que você quiser para representar um partido como trazer um membro da Organização e, você tem que ter certeza do Partido existe / é criado; Organização existe / é criado, e galinha criar uma entrada na tabela de thePartyOrg quais os pontos em ambos.
Como essas informações conexão apenas armazenado como texto dentro de uma única coluna, é provavelmente a mais fácil de primeiro ler tudo em uma tabela de teste e, em seguida, analisar essa coluna em VBA
Outras dicas
Aqui está uma solução:
Eu escrevi uma função que substitui todas as ocorrências de um strFind corda por strReplace, mas só se strFind ocorre entre parênteses. Então você pode substituir todos os "" caracteres por outra coisa (por exemplo, '*'), em seguida, executar o texto de Excel para colunas, em seguida, substituir o '*' é com '' novamente.
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
Assim, os passos são:
1), copie este macro em um módulo em sua pasta de trabalho Excel
2) Digamos que a sua corda está na coluna A. Na coluna B, configurar a função para substituir as vírgulas como este
= replace_paren (A1, "", "*")
3) Encher a fórmula para baixo da coluna
4) Copiar e colar a coluna como valores
5) o texto de Use o Excel para colunas para analisar a coluna usando "" como um delimitador
6) Use replace_paren novamente para substituir todas as ocorrências "*" por ""