VBA实现模糊查询

在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
...遍历所有字符串停止... 说明:由于附件是启用了宏的工作簿,所以建议先打开Excel宏。
← 世界,您好!
二维码

微信扫码关注公众号