【问题标题】:Using VBA in Excel, how do I loop through rows and set cell values?在 Excel 中使用 VBA,如何循环遍历行并设置单元格值?
【发布时间】:2013-01-25 21:56:40
【问题描述】:

我正在尝试自学一些 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

谢谢!

【问题讨论】:

  • 您的文本和代码之间的小不一致:在文本中您将 D1 设置为 K 列中的值,在代码中您将其设置为 E 列中的值 (.Offset(0, -6)。请编辑您的问题!

标签: vba excel


【解决方案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 '创建一个值副本 结束于 结束子

【讨论】:

  • 谢谢 .. 这就是我要找的。我目前在每个 D 单元格中都有一个公式来执行此操作,但我正在尝试学习 VBA 并查看它是如何以这种方式完成的。我可以拼凑一些 C#,所以我理解逻辑,我只是​​不太熟悉 VBA 语法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多