前面两篇博客,我们介绍了VBA和使用VBA获取当前工作表和另一个工作簿的工作表中的数据。这篇我们来说说如何使用VBA模糊查找当前工作表中有用的数据。
我们有时会遇到这样的情况。我们手头有很多很多老的excel文件,他们都是关于提供的内容是类似的,但是他们的格式还有不同,因为表格的样式调整过,或是从别的地方复制过来的,导致格式不尽相同。但值得庆幸的是,你所要的数据在表格中的大致位置是可以确定的。
现在的任务是:把大量类似的excel文件进行整理,从中提取若干字段的值,并汇总到一个新的excel表格中。
比如挑选两种原始文件中的数据:
A类表格:
B类表格:
我们如何使用VBA批量从文件获取“姓名”、“性别”、“出生日期”和“年龄等呢?
处理实际任务时,可能会有很多种表格格式需要兼容。这里为了方便演示,我举出如下几个场景。
1. 字段名和字段值位于前后两个单元格中
字段名和字段值分开的情况,一般都是字段值在字段名的邻近靠后的单元格,类似上图中的姓名。
查找思路:
1. 确认可能出现的区域
2. 在区域内查找包含字段名的单元格
3. 获取字段名单元格水平后面的单元格
4. 获取字段值
示例代码:
'姓名字段名出现的范围是:A3到A5的区域内
With sheet.Range("A3:A5")
'查找包含“姓名”的单元格
Set c = .Find("姓名", LookIn:=xlValues)
'如果找到
If Not c Is Nothing Then
'获取匹配单元格水平后面一个单元格的内容
PName = sheet.Cells(c.Row, c.Column + 1).Value
End If
End With
2. 字段名和字段值在一个单元格中
对于字段名和字段值在一个单元格中的情况,则需要把字段名和间隔符去掉,留下的值视为字段值
查找思路:
1. 确认可能出现的区域
2. 在区域内查找包含字段名的单元格
3. 去除字段名和间隔符
4. 获取字段值
示例代码:
'姓名字段名出现的范围是:A3到A5的区域内
With sheet.Range("A3:A5")
'查找包含“姓名”的单元格
Set c = .Find("姓名", LookIn:=xlValues)
'如果找到
If Not c Is Nothing Then
'获取第一个匹配的单元格的内容
PName = c.Valu