如何用VBA让excel知道“”=“_”

问题描述 投票:0回答:2

我有一个像这样的简单桌子

当我在“B5”中搜索“abc_d”后,它会像这样显示

我希望每次在“B5”中搜索“abc d”或“abcd”。它还会理解我正在寻找“abc_d”。

这是我在VBA中通过过滤列搜索值的代码

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim cell As Range
With Sheet1
               .AutoFilterMode = False
                With .Range("A6:B6")
                     .AutoFilter
                     If Len(Range("A5").Value) <> 0 Then
                        .AutoFilter Field:=1, Criteria1:="*" & Range("A5").Value & "*"
                     End If
                     If Len(Range("B5").Value) <> 0 Then
                        .AutoFilter Field:=2, Criteria1:="*" & Range("B5").Value & "*"
                     End If
                End With
                
    End With
  
End Sub

谢谢你

excel vba search
2个回答
0
投票

替换特定字符后自动过滤

Dim bVal As String: bVal = CStr(Range("B5").Value)

If Len(bVal) > 0 Then
    bVal = Replace(bVal, " ", "")
    If Len(bVal) = 4 Then
        bVal = Left(bVal, 3) & "_" & Right(bVal, 1)
        .AutoFilter Field:=2, Criteria1:="*" & bVal & "*"
    End If
End If

0
投票

假设您可以将 A5 值赋予一个函数,该函数将返回一个数组,其中仅包含该值或该值以及将“ ”替换为“_”的值。

类似这样的:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim cell As Range
    With ActiveSheet
        .AutoFilterMode = False
         With .Range("A6:B6")
              .AutoFilter
              Dim arr
              If Len(Range("A5").Value) <> 0 Then
                 arr = replaceArray("*" & Range("A5").Value & "*")
                 .AutoFilter Field:=1, Criteria1:=arr, Operator:=xlFilterValues
              End If
              If Len(Range("B5").Value) <> 0 Then
                 arr = replaceArray("*" & Range("B5").Value & "*")
                 .AutoFilter Field:=2, Criteria1:=arr, Operator:=xlFilterValues
              End If
         End With
    End With
End Sub

Function replaceArray(val) As Variant()
    Dim arr
    If InStr(val, " ") > 0 Then
        ReDim arr(1 To 2)
        arr(1) = val
        arr(2) = Replace(val, " ", "_")
    ElseIf
        ReDim arr(1 To 1)
        arr(1) = val
    End If
    replaceArray = arr
End Function

位硬编码,但应该可以完成工作,如果你想给它更多的全面用途,可以给函数更多可能的参数。 如果您有疑问,请告诉我。

编辑:看来我误解了这个问题,假设它不是“”->“_”,但总是_而不寻找两者。那么就使用 vBasic 的解决方案吧。

© www.soinside.com 2019 - 2024. All rights reserved.