Если заявление в For-Loop - PullRequest
0 голосов
/ 15 января 2019

Я пытаюсь, чтобы цикл 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 и знаю, что это, наверное, очень легко, но я просто не могу этого понять.

Ответы [ 3 ]

0 голосов
/ 15 января 2019

Я не уверен, зачем вам использовать здесь матрицу, если вы просто просматриваете один столбец.

Приведенный ниже код проверит через столбец (я могу сделать его динамическим диапазоном, если вы того пожелаете) и остановится на первой ячейке со значением «Нет требований» - он затем выведет адрес ячейки со значением и « Нет "и выходит из цикла.

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
0 голосов
/ 23 января 2019

Надеюсь, это поможет.

Следующее должно работать для вас:

    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
0 голосов
/ 15 января 2019

Next i должен находиться за пределами If-End If, и вам нужно добавить Next j в ваш цикл For 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...