【问题标题】:Double For Loop for finding if a cell value is in a range用于查找单元格值是否在范围内的双 For 循环
【发布时间】:2014-10-09 09:14:51
【问题描述】:

更多的 VBA 优点,我尝试编写一个带有 for 循环的 for 循环,以通过获取单元格文本为其分配一个变量,然后运行一个范围,查看单元格值是否在范围内,如果找到则更改如果没有找到另一个单元格的值为是或否,但尽管我自己能够看到范围内的值,但我一直得到所有的否

关键是要避免使用 vlookup 函数 =if(vlookup("value","Table","col","false"),"Yes","No") 尽管它似乎跳过了一些值现在。

我的代码是

Dim xell As Range

For Each xell In Range("C6:C36")

lookFor = xell.Value

For i = 6 To 36

    If Cells(i, 10).Value = lookFor Then
        Cells(i, 7).Value = "Yes"
        Else
        Cells(i, 7).Value = "No"
    End If
Next i

Next xell

在第一个范围内循环的想法是让单元格文本将其分配给一个变量,并在此期间启动一个新循环以查看一个范围以查看单元格值是否在此范围内。

它执行但返回 All no。

【问题讨论】:

  • 您每次都会覆盖您的单元格,因此只能获取 Range("C6:C36") 中最后一个 xcell 的结果
  • 那会是什么更正?

标签: vba excel


【解决方案1】:

原来我在找到yes时退出了我的循环:)

需要退出

Dim xell As Range

For Each xell In Range("C6:C36")

lookFor = xell.Value

For i = 6 To 36

    If Cells(i, 10).Value = lookFor Then
        Cells(i, 7).Value = "Yes"
        Exit For <-------- was missing
        Else
        Cells(i, 7).Value = "No"
    End If
Next i

Next xell

没有解决我当前的问题,即除非编辑,否则找不到数据

【讨论】:

  • 好的,现在,您通过“否”解决了覆盖问题。但是你仍然有最后一个循环(xell = C36)的覆盖。最后一个循环的结果覆盖了之前 29 个循环的结果……但这不是 VBA 的问题,而是你想要做什么的设计问题……
  • 这个结果对我有用,为了确保它确实我在一个 vlookup 旁边运行它,它产生了相同的结果,即使是除非编辑才能找到的常量单元格是相同的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-02
  • 1970-01-01
  • 1970-01-01
  • 2015-01-07
  • 2017-07-05
  • 1970-01-01
相关资源
最近更新 更多