0

我试图让一个 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 新手,知道这可能非常简单,但我似乎无法理解。

4

3 回答 3

1

Next i需要在您之外If-End If,您需要Next jFor i循环中添加代码才能运行。此外,如果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
于 2019-01-15T19:07:48.837 回答
0

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

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

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
于 2019-01-15T19:19:23.090 回答
0

我希望这有帮助。

以下内容应适用于您的目的:

    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
于 2019-01-23T05:39:54.787 回答