vba WorksheetFunction.Match搜索多个值

时间:2016-06-28 10:06:27

标签: excel vba worksheet-function

我目前正在HR表中搜索包含特定文本的列标题。此文本可以每周更改,例如,一个名为“州/省”的列可能在一周内没有空格,但是接下来的一周它可能是“州/省“(注意单词之间的空格)。

我目前正在使用以下代码查找一个条件

StateProvince = WorksheetFunction.Match("State/Province", hr.Sheets("Open").Rows(1), 0)

这样可以正常工作,但我希望添加到这个,以便它查找包含空格的第二个示例,如果这是列标题的情况。有什么建议吗?

2 个答案:

答案 0 :(得分:2)

使用:

StateProvince = WorksheetFunction.Match("State*/*Province", hr.Sheets("Open").Rows(1), 0)

此答案特定于您的问题。如果您想要更通用的解决方案,则必须提供其他示例。

答案 1 :(得分:0)

由于空间的不可预测的外观,你最好通过自定义MyMatch()函数来忽略它们,通过“unspaced”字符串,如下所示:

Function MyMatch(textToSearch As String, rng As Range) As Long
    Dim txtRng As Range, cell As Range

    MyMatch = -1 '<--| default value for no match found
    On Error Resume Next 
    Set txtRng = rng.SpecialCells(xlCellTypeConstants, xlTextValues)  '<--| consider only cells with text values
    On Error GoTo 0
    If Not txtRng Is Nothing Then '<--| If there's at least one cell with text value
        For Each cell In txtRng '<--| loop through selected "text" cells
            If WorksheeyFunction.Substitute (cell.Value, " ", "") = textToSearch Then '<--|remove every space occurrence from cell value and compare it to your "nospace" searched value
                 MyMatch = cell.Column - rng.Columns(1).Column + 1
                 Exit For
            End If
        Next cell 
    End If
End With

使用如下:

Dim StateProvince As Long
StateProvince = MyMatch("State/Province", hr.Sheets("Open").Rows(1)) '<--| pass an "unspaced" string to search
If StateProvince > 0 Then
     ' code for handling found StateProvince
Else
     ' code for handling NOT found StateProvince
End If