在vba中使用匹配比较单元格

时间:2014-10-15 18:44:30

标签: excel vba excel-vba match

我试图使用match函数比较vba中的两列单元格。我将第二列与第一列中的值进行比较,并将未找到的值复制并粘贴到另一列。我也在做与第二次对抗第一次相同的事情。出于某种原因,当我尝试运行它时,它说它无法获取工作表函数类的匹配属性,我真的很困惑为什么我收到此错误。我已粘贴下面的代码。对此问题的任何帮助将不胜感激。

Set PrevMonth = Sheet13.Range(Range("A2"), Range("A2").End(xlDown))
Set currMonth = Sheet13.Range(Range("B2"), Range("B2").End(xlDown))
Count = 2

For i = 2 To PrevMonth.Rows.Count
match = Application.WorksheetFunction.match(Cells(i, 1), currMonth, 0)
If WorksheetFunction.IsNA(match) = True Then
Sheet13.Cells(i, 1).Cut
Sheet13.Cells(Count, 3).Paste
Count = Count + 1
End If
Next i

For i = 2 To currMonth.Rows.Count
match = WorksheetFunction.match(Cells(i, 1), PrevMonth, 0)
If WorksheetFunction.IsNA(match) = True Then
Sheet13.Cells(i, 1).Cut
Sheet13.Cells(Count, 4).Paste
Count = Count + 1
End If
Next i

2 个答案:

答案 0 :(得分:0)

您可以尝试使用

Application.Match(Cells(i, 1), currMonth, 0)

我知道这应该是一个评论...但我无法评论,因为我低于50 Rep ......

答案 1 :(得分:0)

根据我的经验,“无法获取工作表函数类的'X'属性”错误表示已将差的参数传递给工作表函数本身。在您的情况下,参数是:Cells(i,1),currMonth。这可能意味着其中一个范围无法访问。如果我不得不猜测,你想要传递sheet13.cells(i,1)。我建议对整段代码使用'with sheet13'语句。如果找不到匹配项,则WorksheetFunction.Match特别会抛出该错误(VB不能与#N / A返回值一起使用)。使用WorksheetFunction.CountIf> 0可以确保在该范围内存在可行的匹配。

此外,如果A2之后没有数据,则Range(“A2”)。End(xlDown)将导致列的最后一个单元格。这通常是不利的行为。