У меня есть этот код, он должен проверять определенный диапазон в третьем столбце для значения 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
о, это было очень очевидно ...
Это также может произойти в вашей ветке if. Будьте осторожны при использовании ячеек и убедитесь, что значения в скобках положительны.
мне не так ясно, что на самом деле должно означать «начиная с строки, в которой изначально было найдено 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
Cells
нужна строка больше или равная 1. В вашем случаеx -1
равен 0, а строки 0 нет.