【问题标题】:If statement within a For-LoopFor 循环中的 If 语句
【发布时间】:2019-06-09 20:05:14
【问题描述】:

我正在尝试让 for 循环遍历一列以查找“否”,如果未找到“否”,它会在不同的单元格中输出“是”。所以我的思考过程是有一个for循环,然后是一个if语句,如果单元格说“是”或“没有要求”,那么它会继续寻找“否”,如果没有找到“否”,它会输出“是”,如果发现循环停止并输出“否”。

我正在制作一个工具来从同一个 Excel 工作簿的不同工作表中提取数据。

Sub PleaseWork()

Dim matrix(i, j) As Double


For i = 26 To 33
    For j = 8 To 8
        If Worksheets("Calculations").Range(i, j) = "Yes" Or "No Requirement" Then
            Worksheets("Calculations").Range("H33").Value = "Yes"
            Next i
        Else
            Worksheets("Calculations").Range("H33").Value = "No"
        End If



End Sub

此代码甚至无法运行,每次尝试运行时都会出现编译错误。我是 VBA 新手,知道这可能非常简单,但我似乎无法理解。

【问题讨论】:

  • 您能否添加有关您遇到的错误的信息?

标签: arrays excel vba for-loop if-statement


【解决方案1】:

Next i 需要在您的If-End If 之外,并且您需要在您的For i 循环中添加Next j 才能使代码运行。此外,如果j = 8 你的第二个循环只会运行一次,你可以完全消除它。

说起来容易多了

For i = 26 To 33
    If Worksheets("Calculations").Cells(i, 8) = "Yes" Or Worksheets("Calculations").Cells(i, 8) = "No Requirement" Then
        Worksheets("Calculations").Range("H33").Value = "Yes"
    Else
        Worksheets("Calculations").Range("H33").Value = "No"
    End If
Next i

【讨论】:

  • 考虑使用 Cells(i,8) 而不是 Range(i,8)
  • @Gary'sStudent 感谢抽查。
  • @TateGarringer 谢谢你们!但它仍然对我不起作用,我收到“不匹配”错误,它突出显示第 4 行代码(带有 If)
  • Sub PleaseWork() Dim i As Double, j As Double 'Worksheets("Calculations").Range("H33").Value = "Hi" For i = 26 To 33 'For j = 8 到 8 If Worksheets("Calculations").Range(i, 8) = "Yes" Then or "No Requirement" Then Worksheets("Calculations").Range("H33").Value = "Yes" Else Worksheets( "Calculations").Range("H33").Value = "No" End If Next i End Sub
  • Or "No Requirement" 必须是 Or Worksheets("Calculations").Cells(i, 8) = "No Requirement"
【解决方案2】:

如果您只是查看一列,我不确定您为什么要在此处使用矩阵。

下面的代码将检查该列(如果您愿意,我可以将其设为动态范围)并停在值为“无要求”的第一个单元格处 - 然后输出值为“无要求”的单元格地址否”并退出循环。

Sub RandomCol()

For Each cell In Worksheets("Calculations").Range("A1:A50")

    If cell.Value = "Yes" Or cell.Value = "No Requirement" Then

    ElseIf cell.Value = "No" Then
        Range("H33").Value = (cell.Address + " " + "No")
        Exit For
    End If

Next cell

End Sub

【讨论】:

    【解决方案3】:

    我希望这会有所帮助。

    以下内容应该适合您:

        Sub RunIt()
          '          A, E, 1, 5
          PleaseWork 1, 5, 1, 5
        End Sub
    
        Sub PleaseWork(intFromCol As Integer, intToCol As Integer, intFromRow As Integer, _
                       intToRow As Integer)
    
            Dim intI As Integer
            Dim intJ As Integer
            Dim blnFoundNo As Boolean
            Dim strOut As String
    
            strOut = "Yes"
            blnFoundNo = False
            For intI = intFromCol To intToCol
                For intJ = intFromRow To intToRow
                    '                                     Row , Col
                    With Worksheets("Calculations").Cells(intJ, intI)
                        If LCase(Trim(.Value)) = "no" Then
                            strOut = Replace(Cstr(.Address), "$", "") & " = No"
                            blnFoundNo = True
                            Exit For
                        End If
                    End With
                Next intJ
                If blnFoundNo Then Exit For
            Next intI
    
            Worksheets("Calculations").Range("H33").Value = strOut
    
        End Sub
    

    【讨论】:

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