0

我正在尝试自学一些 VBA。我有一个包含 2 个工作表 Sheet1 和 Sheet2 的工作簿。我在下面找到了这段代码并对其进行了修改以适合我。获取 Sheet1!B1 的值,在 Sheet2!K:K 中查找它,并将 Sheet1!D1 设置为 Sheet2 的 E (K - 6) 列中的单元格的值。

我怎样才能循环这个,让它查看 B1:B100 并设置 D1:D100?

Sub Looping()
    Dim rng1 As Range
    Dim strSearch As String
    strSearch = Range("B1").Value
    Set rng1 = Worksheets("Sheet2").Range("K:K").Find(strSearch, , xlValues, xlWhole)
    If Not rng1 Is Nothing Then
        Range("D1").Value = rng1.Offset(0, -6)
    Else
        MsgBox strSearch & " not found"
    End If
End Sub

谢谢!

4

1 回答 1

1

首先,您不需要针对该问题的 VBA 解决方案。只需将此公式放入 Sheet1!D1:D100 中:

=IFERROR(INDEX(Sheet2!$E:E$,MATCH(B1,Sheet2!$K:$K,0))),"未找到")

如果您想使用 VBA 执行此操作,这是您的循环代码:

子循环()
    将目标调暗为范围
    Dim rngSearched as Range

    对于 Sheets("Sheet1").Range("D1:D100") 中的每个 rngTarget
        设置 rngSearched = Sheets("Sheet2").Range("K:K").Find(_
            rngTarget.Offset(, -2).Value, , xlValues, xlWhole)    
        如果 rngSearch 什么都不是,那么
            rngTarget.Value = "未找到"
        别的
            rngTarget.Value = rngSearch.Offset(, -6)
        万一
    下一个 rngTarget
结束子

或者,结合两种方法:

子填充直接
    使用 Sheets("Sheet1").Range("D1:D100")
        .Formula="=IFERROR(INDEX(Sheet2!$E:E$,MATCH(B1,Sheet2!$K:$K,0))),""未找到"")"
        。计算
        .Value = .Value '创建一个值副本
    结束于
结束子
于 2013-01-25T22:11:02.443 回答