2013-02-19 47 views
0

我在MS-Access中有一個表格,用於顯示錶格數據。如下所示需要在ms-access中將分隔字符串拆分爲單獨的行子表格

record id  record date record content 
---------  ----------- -------------- 
    1   1/2/2011  name: ben, age:38, sex: M; name: emma, age:32, sex: F 
    2   5/5/2012  name: john, age:28, sex: M; name: eva, age:24, sex: F 

對於每個記錄內容單元中有多少人的記錄沒有限制。但每個記錄將只有這3個字段。姓名,年齡和性別。

我需要記錄的內容拆分子窗體這樣一種方式,它看起來像:

record id  record date record content 
---------  ----------- -------------- 
    1   1/2/2011  name age sex 
          ---- --- --- 
          ben 38 M 
          emma 32 F 

    2   5/5/2012  name age sex 
          ---- --- --- 
          john 28 M 
          Eva 24 F 

什麼是實現這一目標的最簡單的方法?來自記錄來源的表格具有與第一圖中所示類似格式的數據。我怎樣才能拆分這個複合字符串並將其顯示在多行中?

+0

最簡單的方法是重新設計您的表來規範化它。之後,以顯示的格式顯示數據最好用報告完成。 – Fionnuala 2013-02-19 12:06:00

回答

2

您需要規範化數據 - 將源表分成兩部分。

(你如何需要寫一些VBA代碼:

  • 讀你的記錄表
  • 的每一行列保存[記錄id]的值改成你會在以後的使用變量這個循環
  • 爲[記錄內容]列的每一個值,得到的值成一個字符串
  • 拆分使用定界符字符串「;」,即,分號使用分裂()函數見。 Split strings in excel (vba)舉個例子,你將得到一個字符串列表,列表中的每個字符串將如下所示:「name:xyz,age:xyz,sex:xyz」
  • 使用正則表達式從此字符串提取數據。有關Access中的示例,請參閱http://mark.biek.org/blog/2009/01/regular-expressions-in-vba/
  • 這個正則表達式可能會得到你的姓名,年齡和性別出字符串作爲第一,第二和第三匹配的項目:

    "^.*name:\s*([^,]+),\s*age:\s*([^,]+),\s*sex:\s*([.*])$" 
    
  • 做你搶匹配的項目正則表達式匹配後, 。把它們放進姓名,年齡和性別變量,並使用這些值和先前保存記錄ID插入到新的人民表)

表:

人們

ID

的recordId - 引用Records.ID

PERSONNAME

年齡

性別

記錄

ID

記錄日期

之後,您可以使用當前主表單中的子表單來顯示與每條記錄關聯的人員。如上所述,如果您在兩個表之間有父子關係,那麼Access會非常容易。

相關問題