MS Access 03 - 从Excel电子表格中规范化数据

时间:2009-07-21 14:54:21

标签: excel ms-access excel-formula normalizing

我有一个关于破坏某些东西的方法的问题。我得到这个Excel电子表格,它为我提供了做一份报告所需的数据。它非常简单直接,但有一个特别的部分让我感到悲伤。

在Excel电子表格中,有一列在一列中列出了“涉及的各方”。它通常是由逗号分隔的大约12个人的名字,但在它后面的括号中也有orgID:

乔·史密斯(DIV32),约翰·多伊(DIV12),罗杰·安德鲁斯(DIV14,DIV67,DIV01)等

我需要将它们分成单独的列,以便在将它们导入访问权限后它们将成为单独的字段。我知道如何在Excel中“文本到列”,但是当jon doe(DIV13,DIV54等)有多个分区时,这会搞砸。

不确定如何在访问中执行此操作,但很想知道。

任何人都有excel公式或访问方法吗?

2 个答案:

答案 0 :(得分:1)

我假设您将其导入数据库。如果不这样做,即使它是暂时的,也可能更容易;每次必须运行报告时重做并重做

您将最终有三个表来表示这种情况

  1. theParty(person)
  2. theOrganisation
  3. thePartyOrg
  4. theParty有一个ID列

    组织将拥有自己的ID列

    thePartyOrder将拥有自己的ID列,一个用于theParty,一个用于组织

    每当你想要一个党代表一个党员和组织成员时,你必须确保党的存在/被创造;组织存在/被创建,并且在thePartyOrg表中创建一个指向两者的条目。

    因为这个连接信息只是作为文本存储在一个列中,所以最简单的方法是首先将它全部读入一个临时表,然后在VBA中解析该列

答案 1 :(得分:1)

这是一个解决方案:

我编写了一个函数,用strReplace替换所有出现的字符串strFind,但前提是strFind出现在括号内。因此,您可以用其他东西替换所有“,”字符(例如“*”),然后将Excel的文本运行到列,然后再将“*”替换为“,”。

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

所以步骤是:

1)将此宏复制到Excel工作簿中的模块

2)假设您的字符串在A列中。在B列中,设置函数以替换这样的逗号

= replace_paren(A1, “”, “*”)

3)将公式填入栏目

4)将列复制并粘贴为值

5)使用Excel的文本列来使用“,”作为分隔符来解析列

6)再次使用replace_paren将所有出现的“*”替换为“,”