Репликация формулы ячейки в Excel через VBA

Я хочу создать формулу ЕСЛИ в столбце C в VBA. Однако, когда я это делаю, формула выводится как использование значений ячеек, а не ссылки на ячейку. Я хочу знать, как использовать ссылку на ячейку:

[Пусть формула говорит [=IF(B2>0,2,A2)], а не [=IF(1>0,2,1] в моем листе Excel для ячейки C2 при запуске VBA.]

Dim c As Range
Dim a As Integer
Dim b As Integer

'//loop it in column C
For Each c In Range(Range("C2"), Range("C2").End(xlDown))
    a = c.Offset(0, -1) '// Column B
    b = c.Offset(0, -2) '// Column A
    c.Formula = "=IF(" & b & ">0,2," & a & ")" '// same format as formula [=IF(B2>0,2,A2)]
   
Next
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
0
0
212
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если я правильно понимаю:

Dim a As Range
Dim b As Range

Set b = c.Offset(0, -1) '// Column B
Set a = c.Offset(0, -2) '// Column A

c.Formula = "=IF(" & b.Address(False,False) & ">0,2," & a.Address(False,False) & ")"

Но вы можете сделать это без зацикливания или использования Address; Excel будет обновлять относительные ссылки по мере заполнения формулы в столбце.

With ActiveSheet
    Dim lastRow As Long
    lastRow = .Cells(.Rows.Count, "C").End(xlUp).Row

    .Range("C2:C" & lastRow).Formula = "=IF(B2>0,2,A2)"
End With

Нет, формула изменила бы C2 на =IF(B2>0,2,A2), но C3 на =IF(B3>0,2,A3)

Brian D 19.12.2020 14:51

Excel обновляет относительные ссылки по мере заполнения формулы в столбце, попробуйте.

BigBen 19.12.2020 14:58

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