0

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

2 回答 2

2

=match(cl.address; B; 0)不是一个有效的公式。如果你的意思是说“B 栏”,那就是B:B.

cl.WorksheetFunction.Match应该是Application.WorksheetFunction.Match

对于您想要的第二个参数Worksheets("sheet1").Columns(2)or Worksheets("sheet1").Range("B:B")

Match(cl.address, ...)将尝试cl在 B 列中查找存储为字符串的地址,而不是cl. 如果要查找值,请使用Match(cl.value, ...)

于 2013-05-09T08:48:37.063 回答
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
于 2013-05-09T09:25:17.750 回答