在非有序列表上使用WorksheetFunction.Match而不是精确

时间:2016-02-15 14:28:02

标签: excel vba match

我有两个工作簿,两个都删除了ALMOST相同项目的列表。其中一个列表在列表的末尾有一些额外的空格,它让我彻底抛弃。

 "R-01"
 "R-02"
 "R-03"
 "R-04"

副本中的项目列表是

 "R-01 "
 "R-03"
 "R-02"
 "R-04 "

粘贴中的项目列表是

def user_input():
    try:

        initial_input = float(input("Please enter a number between 1 and 0"))

    except ValueError:

        print("Please try again, it must be a number between 0 and 1")
        user_input()

这些只是我编写的示例,由于各种原因我无法输入实际数据。我无法在MnR工作表中对列表进行排序,因为我给出的工作簿包含一些合并单元格和各种分隔特定部分的数据。通过匹配的方式,我知道使用" 0"的完美匹配由于额外的空间,但使用" 1"或" -1"无法使用,因为我的列表无法排序。

1 个答案:

答案 0 :(得分:1)

试试这个Select Case statement

With wbMatch.Worksheets(1)
    For i = 1 To 10
        myRow = 0
        Select Case False
            Case IsError(Application.Match(.Range("a" & i), wbMnR.Worksheets(1).Range("A:A"), 0))
                myRow = Application.Match(.Range("a" & i), wbMnR.Worksheets(1).Range("A:A"), 0)
            Case IsError(Application.Match(.Range("a" & i) & Chr(32), wbMnR.Worksheets(1).Range("A:A"), 0))
                myRow = Application.Match(.Range("a" & i) & Chr(32), wbMnR.Worksheets(1).Range("A:A"), 0)
            Case Else
                'nothing found
        End Select
        Debug.Print myRow
    Next i
End With

如果您遇到进一步的麻烦,那么Select Case将更容易扩展。为了提高效率,最常见的匹配应位于Case语句的顶部。