我遇到以下问题。我想使用匹配函数来检查(对于列A中的每个值,如果非空白),如果值存在于列B中,并且如果它确实,我希望它将值发布到同一单元格目标中的sheet2。一旦它到达“匹配”行,即“对象不支持此属性或方法”,我就会收到错误。为了防止我选择编码它的方式令我困惑的功能是=match(cl.address; B; 0)
。我的代码是
Sub UseFunction()
Dim myRange As Range
For Each cl In Worksheets("sheet1").Range("A:A")
If cl.Value <> "" Then
If cl.WorksheetFunction.Match(cl.Address, B, 0) Then
Worksheets("sheet2").cl.Value = Worksheets("sheet1").cl.Value
End If
End If
Next cl
End Sub
答案 0 :(得分:2)
=match(cl.address; B; 0)
不是有效的公式。如果你想说“B栏”,那就是B:B
。
cl.WorksheetFunction.Match
应为Application.WorksheetFunction.Match
。
对于您想要的第二个参数Worksheets("sheet1").Columns(2)
或Worksheets("sheet1").Range("B:B")
。
Match(cl.address, ...)
会尝试在列B中找到cl
的地址,而不是cl
的值。如果要查找该值,请使用Match(cl.value, ...)
答案 1 :(得分:1)
Private Const SOURCE_SHEET = "sheet1"
Private Const TARGET_SHEET = "sheet2"
Sub test()
Dim cl As Range, matchResult As Double
Dim source As Worksheet
Dim target As Worksheet
Set source = Worksheets(SOURCE_SHEET)
Set target = Worksheets(TARGET_SHEET)
On Error Resume Next
With source
For Each cl In .UsedRange.Columns("A").Cells
If cl.Value <> "" Then
matchResult = 0
matchResult = WorksheetFunction.Match(cl.Value, .UsedRange.Columns("B"), 0)
If (matchResult > 0) Then target.Cells(cl.Row, cl.Column).Value = cl.Value
End If
Next cl
End With
On Error GoTo 0
End Sub