VBA实现模糊查询

发布于 / 教程 / 0 条评论

在Excel里需要用到查询时,一般想到的是Ctrl+F。但在实际使用中有诸多缺陷,比如当结果存在多情况时,通过这种方式并不能实现多结果的返回。于是我们想到了数组公式或者辅助列。这里用另外一种方式即VB代码实现,代码并不长,简洁易懂!文末提供源文件下载。

excel,vbexcel,vb
这里以A:K列为源数据区域,单元格L5以下列返回模糊查找的值,单元格M5以下列返回结果所在的位置,当点击按钮时弹出输入框,确定后返回结果。
以下是源代码:

Sub findAll()
Dim findsm As String, address As String
Dim sc As Range, rs As Range, fCount As Long
findsm = InputBox("找什么(⊙o⊙)?")
If Len(findsm) > 0 Thens
  clearFinds
  Set sc = Range("a1").CurrentRegion
  Set rs = sc.find(What:=findsm)
If Not rs Is Nothing Then
  address = rs.address
  Do
  Range("L5").Offset(fCount).Value = rs.Value
  Range("M5").Offset(fCount).Value = rs.address
  Set rs = sc.FindNext(rs)
  fCount = fCount + 1
    Loop While Not rs Is Nothing And rs.address<>address
End If
End If
End Sub

….执行清空…

Sub clearFinds()
Range(Range("L5:M5"), Range("L5:M5").End(xlDown)).Clear
End Sub

此代码用了一个自定义函数,在循环查找这里可能有些不好理解:

If Not rs Is Nothing Then
address = rs.address

…匹配到赋值(单元格所在位置)给变量…

Do
Range("L5").Offset(fCount).Value = rs.Value

…返回值…

Range("M5").Offset(fCount).Value = rs.address

…返回位置…

Set rs = sc.FindNext(rs)
fCount = fCount + 1

…继续遍历剩余字符串…

Loop While Not rs Is Nothing And rs.address<>address
End If

…遍历所有字符串停止…

提供源文件下载:

点击下载


解压密码:gig365
说明:由于附件是启用了宏的工作簿,所以建议先打开Excel宏。

转载原创文章请注明,转载自: LYLARES'S BLOG » VBA实现模糊查询

Not Comment Found