Вот фрагмент моего кода:

 For i = 1 To k        
    If Range("D2").Offset(i, 0).Interior.ColorIndex > 0 Then
   Else
      Range("D2").Offset(i, 0).Formula = Range("D2").Formula

Формула в D2

   =IF(F2<0,6;5;IF(F2<0,9;10;22))

Проблема в том, что все ячейки в столбце D получают одну и ту же формулу. Как я могу изменить его, чтобы он автоматически настраивался, как в пользовательском интерфейсе Excel (например, F2 становится F3 и так далее)

3 ответа3

1

Свойство формулы принимает формулу точно так, как указано. Он ничего не знает о настройке ссылок. Вам потребуется манипулирование строками, чтобы исправить скопированную формулу перед ее установкой в новую ячейку.

Возможно, было бы лучше просто построить формулу в коде, чем копировать ее и пытаться исправить.

1

Если, возможно, есть особая причина для использования функции автозаполнения Excel (возможно, вы не знаете, какой будет формула, и хотите сохранить свой код простым), вы можете использовать функцию Filldown .

Однако необходимо убедиться, что режим расчета (CalcMode) установлен на автоматический (xlCalculationAutomatic).

Range(Range("D2").Address & ":" & Range("D2").Offset(k, 0).Address).FillDown

Примечание: приведенный выше код должен быть извлечен из цикла for .

0

Вы бы лучше обслужили, если вынули функцию IF из ячейки и закодировали ее в VBA.

Если я правильно понял вашу функцию IF (я так понимаю, вы не используете английскую версию в соответствии с моделью пунктуации), то в VBA это выглядит примерно так:

If Range("D2").Offset(i, 2) < 0.6 Then
    Range("D2").Offset(i, 0) = 5
    ElseIf Range("D2").Offset(i, 2) < 0.9 Then
        Range("D2").Offset(i, 0) = 10
        Else
            Range("D2").Offset(i, 0) = 22
End If

Это заменит эту строку в вашем коде:

Range("D2").Offset(i, 0).Formula = Range("D2").Formula

Я использую смещение (i, 2) для ссылки на запрашиваемый столбец в F2.

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