使用VBA进行部分字符串搜索

时间:2016-05-25 05:44:22

标签: excel-vba vba excel

我正在尝试编写一个宏来搜索和显示基于搜索词的数据行,该搜索词是一个部分字符串(通常是4个字符,可能是16个),我是一个完整的初学者,但到目前为止,我有以下内容(在戈德的帮助下):

    Private Sub Worksheet_Change(ByVal Target As Range)
Dim cell As Range
Application.ScreenUpdating = False
With ActiveSheet
    .Rows.Hidden = False    'unhides all rows
End With
For Each cell In ActiveSheet.Range("C3:C1000")
    If cell.Value <> ActiveSheet.Range("A1").Value Then _
            cell.EntireRow.Hidden = True
    If ActiveSheet.Range("A1").Value = "" Then
        cell.EntireRow.Hidden = False
    End If
Next
Range("A1").Select  'ready for next value input
Application.ScreenUpdating = True
End Sub

如何将搜索词定义为部分匹配,而不是完全匹配和松散的案例感觉?

TIA

邓肯

数据字符串没有特殊字符,只有0-9和A-Z,因此可能是Like函数适合任务。如果是这样,宏会如何变化?道歉,但这是新手。 它尝试编辑: 如果ActiveSheet.Range(&#34; A1&#34;)。值=&#34;&#34;然后
to:如果ActiveSheet.Range(&#34; A1&#34;)。值类似&#34; *&#34;然后 但没有结果

2 个答案:

答案 0 :(得分:2)

首先尝试将您的字符串(针和干草堆)转换为LCASE(),然后使用LIKE运算符。如下例所示

if lcase(haystack) like "*" & lcase(needle) & "*" then
'do something

这与regexp一样。因此,如果包含 needle ,它将调查字符串haystack。 *表示一切(或没有)。这是清楚的吗?

答案 1 :(得分:2)

由于我们无法知道您的针头是否包含like - 敏感字符,例如#?,我建议通过instr()提供解决方案:

if instr(lcase(haystack), lcase(needle)) > 0 then
' Do Stuff

这为您提供needlehaystack第一次出现的起始位置,如果找不到needle则为0。