VBA中的WorksheetFunction

时间:2013-05-09 08:13:00

标签: excel vba

我遇到以下问题。我想使用匹配函数来检查(对于列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

2 个答案:

答案 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