Я хочу пройтись по столбцу P и посмотреть, есть ли в нем ячейка с номером "1", тогда в то же время пройти по циклу через столбец N, чтобы узнать, есть ли также номер "1" в той же строке / столбце, если в столбце N нет "1", в то время как в столбце P стоит номер "1", должно появиться сообщение об ошибке.

Вот что я начал, но, похоже, он не работает так хорошо.

    For Each a In Range("p6:p40")
    If a.Value = "1" Then
        For Each c In Range("n6:n40")
            If c.Value = "" Then
            msgbox("check again")
            Else
            msgbox("check again")
            End If
        Next
    End If
Next

2 ответа2

2

Вам не нужен другой цикл для столбца N, если вы хотите проверить значение в той же строке, которую вы проверяете для столбца P. Попробуйте выполнить следующие действия:

Sub test()

For Each a In Range("p6:p40")
    If a.Value = "1" Then
       If a.Offset(0, -2).Value = "" Then
           MsgBox ("blank in row " & a.Row)
       Else
           MsgBox ("not blank in row" & a.Row)
       End If
    End If
Next

End Sub

Кроме того, просто совет для отладки: это очень помогает, если у вас есть два разных сообщения для двух ветвей IF. В противном случае, откуда вы знаете, какая ветка IF только что была запущена?

1

Вы можете изменить цикл на обычный цикл for:

For i = 6 To 40
    If Range("P" & i) = "1" Then
        If Range("N" & i) <> "1" Then
            MsgBox "P = 1 but N did not on row " & i
        End If
    Else

    End If
Next

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .