Вот мои два цента. Я бы отказался от идеи использования SpecialCells
для целых столбцов. Если вы хотите go с SpecialCells
, то сначала создайте Range
в столбце BM
, чтобы использовать его. Если какой-либо столбец превышает интересующие вас строки, вы получите значения в местах, которые вам действительно не нужны (формулы в вашем случае).
Вот небольшой пример, охватывающий A1:C5
:
Наша область интересов - столбец B:B
, где, если он пуст, нам нужны значения из столбца C:C
Когда мы запускаем код используя SpecialCells
, например:
Columns("B:B").SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=RC3"
В итоге мы получим:
То, что мы видим, это SpecialCells
использует UsedRange
(как справедливо упомянуто @Peh в разделе комментариев) и поэтому очень ненадежно при таком использовании. Существует риск того, что вы получите значения / формулы там, где они вам не нужны. Я предлагаю использовать последнюю использованную строку из столбца C:C
(или в вашем случае DN
) и go оттуда. Так что уже намного экономнее будет что-то вроде:
.Range("BM1:BM" & <LastUsedRowOfDN>).SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=RC118"