【问题标题】:If statement inside Do while loop not workingDo while 循环中的 if 语句不起作用
【发布时间】:2022-01-26 13:20:39
【问题描述】:

我是 excel VBA 的新手,我正面临这个问题,我正在编写一个代码,它应该查看一个单元格的值,然后遍历一个数字列表并获得 下一个更高或等于 strong> 此列表中的数字。

问题是代码可以正常工作并让我获得下一个更高的数字,但是当涉及到 equal 部分时它不起作用,我写了一个 if 语句,当(equal) 的条件已经实现,但似乎这条线没有被执行。 请帮我弄清楚为什么会发生这种情况

我的代码看起来像这样

Do While ([c12] < [h13])
If ([c12] = [h13]) Then
    Exit Do
End If
[c12].Value = Worksheets("lists").Cells(cb, 9)
cb = cb + 1
Loop

【问题讨论】:

  • 数字是整数吗?举一个不匹配的两个数字的例子。

标签: excel vba


【解决方案1】:

当您的 If 语句为 True 时,您的 While 将始终为 False,因此循环在 If 触发之前结束。

如果您要将While 更改为Do,您可以看到If 语句正在执行。

    Do
        If ([c12] = [h13]) Then
            Exit Do
        End If
        [c12].Value = Worksheets("lists").Cells(cb, 9)
        cb = cb + 1
    Loop

【讨论】:

  • 不幸的是,同样的问题发生了。我正在寻找的值是 80,并且这个数字存在于我正在循环的列表中,因此循环应该在 80 处停止。但是给了我 100,这是下一个值。
  • 一个舍入问题很可能或可能一个实际上是一个字符串,而另一个是一个数字。
【解决方案2】:

我认为我同意 @Warcupine 的观点,即“如果”是不必要的。

如何将“If”条件构建到条件循环本身中?

Do
   [c12].Value = Worksheets("lists").Cells(cb, 9)
   cb = cb + 1
Loop Until ([c12] >= [h13])

【讨论】:

    【解决方案3】:

    第一个数值大于...

    • 调整I2(第一行2)和Sheet1(标签名)。
    Option Explicit
    
    Sub Test()
    
        ' Workbook
        Dim wb As Workbook: Set wb = ThisWorkbook ' workbook containing this code
    
        ' Source
        Dim sws As Worksheet: Set sws = wb.Worksheets("Lists")
        Dim slRow As Long: slRow = sws.Range("I" & sws.Rows.Count).End(xlUp).Row
        Dim srg As Range: Set srg = sws.Range("I2:I" & slRow) ' adjust "I2"
    
        ' Destination
        Dim dws As Worksheet: Set dws = wb.Worksheets("Sheet1") ' adjust "Sheet1"
        Dim dCell As Range: Set dCell = dws.Range("C12")
        Dim dValue As Variant: dValue = dws.Range("H13").Value
        If Not IsNumeric(dValue) Then Exit Sub
        
        Dim sCell As Range
        Dim sValue As Variant
        
        ' Loop and write.
        For Each sCell In srg.Cells
            sValue = sCell.Value
            If IsNumeric(sValue) Then
                If sValue >= dValue Then ' value found...
                    dCell.Value = sValue
                    Exit Sub
                End If
            End If
        Next sCell
        ' value not found...
        dCell.Value = "" ' or '0', or remove to keep as-is
     
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-16
      • 2023-02-15
      • 1970-01-01
      • 1970-01-01
      • 2020-05-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多