If else с двумя условиями и использованием результата в части if и else

У меня есть этот код, он должен проверять определенный диапазон в третьем столбце для значения 4, и если ячейка имеет значение 4, он должен проверять значение соседней ячейки в четвертом столбце. Если это значение меньше y, предполагается, что значение 4 будет присвоено 5 ячейкам 15-го столбца, начиная с строки, в которой 4 были изначально найдены. Если он выше, чем он должен назначить его 8 ячейкам в столбце 15, начиная с строки, в которой 4 были изначально найдены.

Проблема, которая продолжает возникать, заключается в том, что спецификация ячейки в части Else, например .Cells(x - 1, a).Value = 5, приводит к ошибке. Если я использую только часть If, она работает нормально.

Sub einfügen()

Dim a As Integer
Dim x As Integer
Dim y As LongLong

a = 15
y = 100000


With ActiveWorkbook.ActiveSheet

For x = 1 To 112
    If .Cells(x, 3).Value = 4 And ActiveWorkbook.ActiveSheet.Cells(x, 3).Offset(0, 1) <= y Then

            .Cells(x - 1, a).Value = 4
            .Cells(x - 2, a).Value = 4
            .Cells(x - 3, a).Value = 4
            .Cells(x - 4, a).Value = 4
            .Cells(x - 5, a).Value = 4
    Else

            .Cells(x - 1, a).Value = 4
            .Cells(x - 2, a).Value = 4
            .Cells(x - 3, a).Value = 4
            .Cells(x - 4, a).Value = 4
            .Cells(x - 5, a).Value = 4
            .Cells(x - 6, a).Value = 4
            .Cells(x - 7, a).Value = 4
            .Cells(x - 8, a).Value = 4


   End If


   Next

End With
End Sub
Cells нужна строка больше или равная 1. В вашем случае x -1 равен 0, а строки 0 нет.
Storax 10.09.2018 09:13

о, это было очень очевидно ...

M.H. 10.09.2018 09:15

Это также может произойти в вашей ветке if. Будьте осторожны при использовании ячеек и убедитесь, что значения в скобках положительны.

Storax 10.09.2018 09:19
0
3
27
1

Ответы 1

мне не так ясно, что на самом деле должно означать «начиная с строки, в которой изначально было найдено 4»., поэтому я предположил, что он должен начинаться с текущей строки x вниз

кроме того, основываясь на вашем описании, вы должны разделить первые два условия IF на два, иначе ваш код всегда будет пытаться заполнить некоторые ячейки с помощью 4

вот фрагмент, который вы можете попробовать:

With ActiveWorkbook.ActiveSheet
    For x = 1 To 112
        If .Cells(x, 3).Value = 4 Then '" if a cell has the value 4"
            If .Cells(x, 3).Offset(0, 1) <= y Then '"check the value of the adjacent cell in the fourth column. If this value is smaller than y..."
                .Cells(x, a).Resize(5).Value = 4 '"assign the value 4 to the 5 cells in the 15th column starting in the row in which the 4 was initially found."
            Else '"If it's higher"
                .Cells(x, a).Resize(8).Value = 4 '"assign it to 8 cells in column 15 starting in the row in which the 4 was initially found."
            End If
        End If
    Next
End With

Другие вопросы по теме