在无序列表上使用WorksheetFunction.Match,而不是确切的

我有两个工作簿,并且都删除几乎相同的项目列表。 其中一个列表的末尾有一些额外的空间,它把我完全扔掉了。

Public Sub test() 'Imports data into M&R spreadsheet Dim wbMnR As Workbook Dim wbMatch As Workbook Set wbMnR = Workbooks("MnRs.xlsx") Set wbMatch = Workbooks("Match.xlsm") Dim myRow As Integer For i = 1 To 10 myRow = WorksheetFunction.Match(wbMatch.Worksheets(1).Range("a" & CStr(i)), wbMnR.Worksheets(1).Range("A:A"), 0) Debug.Print myRow Next i End Sub 

在副本中的项目列表是

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

粘贴的项目列表是

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

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

试试这个Select Case语句 。

 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语句的顶部。