Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2214|回复: 7

[已解决]用VBA查询某个值时,#号不能被查询到,只能[#]才能查到的问题

[复制链接]
发表于 2015-4-2 14:31 | 显示全部楼层 |阅读模式
本帖最后由 rosedowson 于 2015-4-2 16:28 编辑

有以下两个查询代码,还请老师解决一下,在数据表中单元格内如果含有#号,就查不到。如数据为“1#公交”,那么我用以下代码查询“1#公交”时则为空,要查“1[#]公交”才能查到,请问代码该如何优化呀,还请老师修改一下,谢谢啊一、单项查询
老师 我就没传附件了,因为公司安了加密系统,附件传不上来,麻烦您在这段代码上修改一下吧,谢谢呀

加上这条代码, Range("A5,B5").Replace "#", "[#]"   就可以查询到,但是会把单元格 A5、B5的值由#改为[#],能不能查询的时候加上[],但是不在A5、B5上显示出来了??


Private Sub CommandButton1_Click()
If Trim([a5] & [B5]) = "" Then Exit Sub
On Error Resume Next
With Sheets("数据表")
  r = .Range("F2", .[a40000].End(3))
End With
a = [a5]
b = [B5]
s1 = "*" & a & "*"
s2 = "*" & b & "*"
For i = 1 To UBound(r)
  If r(i, 2) Like s1 Then
  If (r(i, 1) Like s2 Or r(i, 3) Like s2) Then
    N = N + 1
    For j = 1 To 6
      r(N, j) = r(i, j)
    Next
  End If
  End If
Next
If N Then
  [E5:S150000] = ""
  [e5].Resize(N, 6) = r
End If
End Sub


二、多项查询
Private Sub CommandButton2_Click()
If WorksheetFunction.CountA([a37:c56]) = 0 Then Exit Sub
Dim arr, brr
brr = Sheets("数据表").UsedRange
For b = 2 To UBound(brr)
    brr(b, 1) = brr(b, 1) & "|" & brr(b, 2) & "|" & brr(b, 3) & "|" & brr(b, 4) & "|" & brr(b, 5) & "|" & brr(b, 6)
Next
arr = [a37:c56]
r = 5
For a = 1 To UBound(arr)
    tmp$ = "*" & arr(a, 1) & "*" & arr(a, 2) & "*" & arr(a, 3) & "*"
    If Len(tmp) > 4 Then
        For b = 2 To UBound(brr)
            If brr(b, 1) Like tmp Then Cells(r, "e").Resize(1, 6) = Split(brr(b, 1), "|"): r = r + 1
        Next
    End If
Next
Range("E5").Select
End Sub
最佳答案
2015-4-2 15:26
http://wenda.haosou.com/q/1382700967066527?src=150
“#”、“[”、“?”、“*” 这些特殊字符匹配,必须用方括号将它们括起
本例中如果只是#问题,可用 s1 = "*" & a(1, 1) & "*": s1 = Replace(s1, "#", "[#]") 解决
发表于 2015-4-2 14:42 | 显示全部楼层
你至少做个模拟文件,[a5] [b5],数据源是怎么一回事。

评分

参与人数 1 +1 收起 理由
rosedowson + 1 谢谢啊

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2015-4-2 14:43 | 显示全部楼层
我在查询表上面的   A5 和 B5输入内容,   然后点击查询,  他会在数据表中查询,但是数据表中含#号的单元格,查不出来
回复

使用道具 举报

 楼主| 发表于 2015-4-2 14:45 | 显示全部楼层
本帖最后由 rosedowson 于 2015-4-2 14:53 编辑
grf1973 发表于 2015-4-2 14:42
你至少做个模拟文件,[a5] ,数据源是怎么一回事。

类似于,这个附件,  当表B中的数据,含有#号, 如“1#公车”        那么表A的  A3:C3输入   1#公车,就查不到,必须输入 1[#]公车,才能查到

老师这个附件里面其它的内容不用看,这是以前的附件,因为现在公司安装了加密系统,我无法修改内容,一改就乱码了。

Book11-answer.rar

259.62 KB, 下载次数: 2

回复

使用道具 举报

发表于 2015-4-2 15:26 | 显示全部楼层    本楼为最佳答案   
http://wenda.haosou.com/q/1382700967066527?src=150
“#”、“[”、“?”、“*” 这些特殊字符匹配,必须用方括号将它们括起
本例中如果只是#问题,可用 s1 = "*" & a(1, 1) & "*": s1 = Replace(s1, "#", "[#]") 解决

评分

参与人数 1 +1 收起 理由
rosedowson + 1 谢谢呀

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2015-4-2 15:57 | 显示全部楼层
grf1973 发表于 2015-4-2 15:26
http://wenda.haosou.com/q/1382700967066527?src=150
“#”、“[”、“?”、“*” 这些特殊字符匹配,必须 ...

也也也。。。我说的这么乱,,你都看懂啦。。。。
回复

使用道具 举报

 楼主| 发表于 2015-4-2 16:00 | 显示全部楼层
grf1973 发表于 2015-4-2 15:26
http://wenda.haosou.com/q/1382700967066527?src=150
“#”、“[”、“?”、“*” 这些特殊字符匹配,必须 ...

亲~你帮我完美解决了第一个代码  “单项查询的”,  第2个代码,该如何改呀???加到哪里  
arr = [a37:c56]arr = Replace(arr, "#", "[#]")    这样就报错啦

二、多项查询
Private Sub CommandButton2_Click()
If WorksheetFunction.CountA([a37:c56]) = 0 Then Exit Sub
Dim arr, brr
brr = Sheets("数据表").UsedRange
For b = 2 To UBound(brr)
    brr(b, 1) = brr(b, 1) & "|" & brr(b, 2) & "|" & brr(b, 3) & "|" & brr(b, 4) & "|" & brr(b, 5) & "|" & brr(b, 6)
Next
arr = [a37:c56]
r = 5
For a = 1 To UBound(arr)
    tmp$ = "*" & arr(a, 1) & "*" & arr(a, 2) & "*" & arr(a, 3) & "*"
    If Len(tmp) > 4 Then
        For b = 2 To UBound(brr)
            If brr(b, 1) Like tmp Then Cells(r, "e").Resize(1, 6) = Split(brr(b, 1), "|"): r = r + 1
        Next
    End If
Next
Range("E5").Select
End Sub
回复

使用道具 举报

 楼主| 发表于 2015-4-2 16:27 | 显示全部楼层
grf1973 发表于 2015-4-2 15:26
http://wenda.haosou.com/q/1382700967066527?src=150
“#”、“[”、“?”、“*” 这些特殊字符匹配,必须 ...

老师,谢谢啊,我照您说的理解了谢谢啊谢谢啊

    tmp$ = "*" & arr(a, 1) & "*" & arr(a, 2) & "*" & arr(a, 3) & "*"
    tmp$ = Replace(tmp$, "#", "[#]")

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-26 12:13 , Processed in 2.035885 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表