【问题标题】:Do.. Loop Until with multiple IFsDo.. 使用多个 IF 循环直到
【发布时间】:2013-10-01 17:44:10
【问题描述】:

我需要你的帮助。我想在我的代码中添加一个“Do ... Loop Until”。

我要做的就是自动更改范围并执行所有逻辑测试,从单元格 O2 作为我的代码的起点,直到单元格 O1700 获得 "END" 的值

因此,如果 O2 的值 = "NA" 则执行所有 IF,如果不只是跳到下一个单元格并一次又一次地执行 AvtiveCell = "NA" 直到 "END"。

我添加了类似的内容,但它无法正常工作,它只是找到第一个“NA”单元格然后停止。

    Range ("O2").Select

    IF (ActiveCell = "NA") THEN
    'MY CODE

    ELSE
    DO
    ActiveCell.Offset(1, 0).Select
    Loop Until (ActiveCell = "END")

您的帮助将不胜感激。 谢谢

【问题讨论】:

  • 您是指NA 还是#N/A?如果是后者,我相信你需要检查单元格的错误状态。

标签: vba loops excel


【解决方案1】:

If 必须循环内:

range("O2").Select
do
    if ActiveCell = "NA" then
        ' Your code goes here
    else
        ' If you want to do something if the cell is not "NA"
    end if
    ActiveCell.Offset(1,0).Select
loop until ActiveCell = "End"

【讨论】:

    【解决方案2】:
    Dim counter As Integer
    counter = 2
    Do
        If Range("O" & counter) = "NA" Then
            'Your code
        End If
        counter = counter + 1
    Loop Until Range("O" & counter) = "END"
    

    附言

    1. 您可以缩进代码以增强可读性。
    2. 正如有人已经提到的,您是否在寻找#N/A 而不是NA
    3. 避免使用Select,因为它会减慢您的代码速度。它还可能降低可维护性。

    【讨论】:

    • 感谢它运行良好,是的,我正在寻找 NA 值而不是错误 #N/A。
    【解决方案3】:

    试试

    Dim lLoop as long
    
    lloop=2
    
    do while cells(lloop,1)<>"END"
    if cells(lloop,1)="NA" then
    'my code
    end if
    lloop=lloop+1
    loop
    

    如果可能,请避免选择单元格,除非您想向用户显示选择更改。它会减慢进程并通常使编码复杂化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-16
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-27
      相关资源
      最近更新 更多