2009-07-21 66 views
0

我有一個問題,關於一種方法分開的東西。我得到這個Excel電子表格,爲我提供了我需要做一個報告的數據。它非常簡單直接,但是有一個特定的部分給我帶來了一些悲傷。MS Access 03 - 從Excel電子表格規範數據

在Excel電子表格中,列中列出了「參與方」列。它通常是約12人的姓名用逗號隔開,但也有ORGID在它後面括號:

喬·史密斯(DIV32),李四(DIV12),羅傑·安德魯斯(DIV14,DIV67,DIV01)等

,我需要將它們分解爲單獨的列,以便在將它們導入訪問時它們將成爲單個字段。我知道如何在Excel中「文本到列」,但當jon doe(DIV13,DIV54等)有多個分區時,這會搞砸。

不知道如何在訪問中做到這一點,但很想知道。

任何人都得到了一個Excel的公式,或訪問方法請這?

回答

1

我假設你正在將它導入到你的數據庫中。如果不是,即使是暫時的,也可能更容易;和重做每次你必須運行

你將最終有三個表來表示這種情況

  1. theParty報告(人)
  2. theOrganisation
  3. thePartyOrg
時間

theParty有一個ID列

該組織將它'自己的ID列

thePartyOrder都會有它自己的ID列,一個用於theParty,以及一個用於theOrganisation

每當你想代表的締約方爲使成員和組織,你必須確保黨存在/被創建;組織存在/被創建,並且在派對錶中創建了一個指向兩者的條目。

因爲只是存儲爲單個列中的文本這方面的信息,它可能是一個最簡單的先讀這一切到一個臨時表中,然後分析該列在VBA

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被取代的‘*’所有的「」

+0

注意如果有嵌套括號,代碼會中斷。 – Emily 2009-07-22 20:25:59