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?

Foi útil?

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

  1. theParty (pessoa)
  2. theOrganisation
  3. 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 ""

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top