Новости:

Из правил форума: Тема должна отражать суть вопроса, топики типа "help please" будут удаляться!

Главное меню

Растянуть формулу, но при условии

Автор Bomont, 06.02.2012, 16:49

« назад - далее »

Bomont

Добрый день, господа!

Есть такой код:

Set SourceRange = Worksheets("Исходные").Range("L1:DT1")
Set fillRange = Worksheets("Исходные").Range("L1:DT" & k + r2 - r1)
SourceRange.AutoFill Destination:=fillRange

И вот что интересное получилось, если среди столбцов от L до DT есть пустые (в первой строчке нет формулы), то Excel протягивает и их - и при сохранении файл значительно увеличивается, как будто эти столбцы не пустые!

Вопрос, как запустить макрос с растяжением формул в столбцах от L до DT, но лишь в тех из них, где в первой строчке есть собственно формула, которую можно растянуть? Т.е. как я понимаю надо перебирать каждый столбец и если первая строчка содержит формулу или значение, то растянуть и далее так до столбца DT.

Помогите, заранее спасибо!

Bomont

Прикрепил для примера файл.

Необходимо:
Протянуть все столбцы от L до DT с первой строки до 1000, но только те столбцы где в первых строчках есть формулы

Bomont

#2
Спасибо за ответ.
Наверное неудачный пример выложил. В моем файле все формулы зависят от предыдущих. В вашем примере, как я понял вы просто скопировали формулы из первой. А их необходимо именно растянуть.

В том то и дело, что заметил разницу (в моем файле были иные формулы  в первых строчках, а количество строк более 100 000). Размер файла значительно отличался от:
1. если вручную протянуть только те столбцы где в первой строчке есть формула
2. если протянуть макросом сразу все столбцы

Bomont

Спасибо Вам за внимание! Вы уже помогли! На основе Вашего когда я состряпал свой:

'рястягиваем формулы в столбцах с 1 по 150  и с 10 строки по 1000-ю, но при условии, что есть формулы в 10 строке
y = 1
    While y <= 150
        If Workbooks(bn_).Worksheets("Исходные").Range(Cells(10, y), Cells(10, y)).HasFormula Then
            Workbooks(bn_).Worksheets("Исходные").Range(Cells(10, y), Cells(1000, y)) =  Workbooks(bn_).Worksheets("Исходные").Range(Cells(10, y), Cells(10, y)).Formula
        End If
        y = y + 1
    Wend