2013-02-19 24 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会非常容易。

相关问题