Почему мой код VBA применяет формулу ко всем строкам в столбце? - PullRequest
0 голосов
/ 25 июня 2019

Я хочу применить формулу только к строкам, которые удовлетворяют условию, но она каким-то образом применяет формулу ко всем строкам.

У меня есть лист Excel с таблицей в нем. Для столбца Q я хочу добавить формулу, только если значение столбца K НЕ равно 0, а значение столбца I равно 0. Но вместо того, чтобы применять его к строкам, удовлетворяющим условию, он применяет формулу ко всем строкам в столбце Q. Я добавил оператор if, и он, кажется, работает, когда я запускаю программу в режиме отладки и проверяю, соответствуют ли правильные строки условию if.

Что странно, если я попытаюсь поместить какую-нибудь случайную строку в строки для «else», это сработает! Но я ничего не хочу в тех строках, которые не удовлетворяют условию.

Dim lRow, i As Integer
lRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row

For i = 2 To lRow 'Starts from i=2 because i=1 is the headers

    If Range("K" & i).Value <> 0 And Range("I" & i).Value = 0 Then
        Range("Q" & i).FormulaR1C1 = "=RC[-6]"  'This is the formula.
    Else
        Range("Q" & i).Value = "" 'Doesn't work.
        Range("Q" & i).Value = "XXX" 'Works, but it inserts "XXX" to the cells. Ideally, I dont want anything, any formula in the cells.
    End If   
Next i

Я ожидаю, что строки, удовлетворяющие условию, должны вставить формулу в столбец Q, но я не понимаю, почему мой код не работает.

1 Ответ

4 голосов
/ 25 июня 2019

Как отмечает GSerg в комментариях, такое поведение обусловлено тем, что Excel автоматически заполняет формулу, как в таблице.

Вы можете вставить в свой код следующее, что отключит автозаполнение:

Application.AutoCorrect.AutoFillFormulasInLists = False

Не забудьте снова установить для него значение True, если это обычно требуется для вас (или если вы делитесь этим макросом с другими). ​​

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...