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
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
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

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