Страницы: 1
RSS
Вставить формулу массива через vba
 
Доброго утра всем) помогите пожалуйста с возникшей проблемой, у меня имеется отчет который считается формулами массива типа : = ЕСЛИОШИБКА(ВПР(Е6;ЕСЛИ('ЛИСТ 1'!В3:В100=С12;'ЛИСТ 1'!А3:Z100;"");5;0);"-") таких формул порядка 500 в отчете, что очень тормозит работу когда работаю с другими листами книги (постоянно пересчитывает) решила запускать отчет по кнопке "сформировать" написала макрос, но на этих формулах выдает ошибку type mismatch. Может я не правильно пытаюсь вписать эту формулу в код?
Код
Private Sub sformirovat_click()
sheets ("Отчет 1").Select
Range ("C8").FormulaArray = "=ЕСЛИОШИБКА(ВПР(Е6;ЕСЛИ('ЛИСТ 1'!В3:В100=С12;'ЛИСТ 1'!А3:Z100;"");5;0);"-")"
'дальше идут остальные формулы
end sub
 
Ну не любит аглицкий VBA локальных формул, да и кавычки маскировать надо:    
Код
Range("C8").FormulaArray = _
"= IFERROR(VLOOKUP(E6,IF('ЛИСТ 1'!B3:B100=C12,'ЛИСТ 1'!A3:Z100,""""),5,0),""-"")"

ну и про кириллицу в адресах диапазонов молу...
Изменено: buchlotnik - 20.02.2019 09:39:05
Соблюдение правил форума не освобождает от модераторского произвола
 
1. Запустите макрорекордер и впишите формулу в ячейку. Потом посмотрите, что запишет макрорекордер.
2. Зачем у Вас в формуле вместо латинских букв e, a, b - русские е, а, в ?

PS
1. М.б. просто отключать автопересчет ячеек на время редактирования листов?
2. Лучше бы файл - пример выложили. М.б. там всё проще сделать можно. 500 формул - это, скорое, немного.
Изменено: Михаил Лебедев - 20.02.2019 09:29:13
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Да извините, набирала сообщение в телефоне, по ошибке ввела буквы в русской раскладке. Воспользовалась формулой buchlotnik, но ошибка осталась. Сейчас попробую файл выложить(

Цитата
Михаил Лебедев написал:  отключать автопересчет ячеек на время редактирования листов?
т.е. считать только когда лист отчет активен? А не подскажите как это сделать?

добавила файл, правда пустой для уменьшения размера
Изменено: Kcuxa_xa - 20.02.2019 11:19:07
 
Цитата
Kcuxa_xa написал: Воспользовалась формулой buchlotnik
неправда
Цитата
Kcuxa_xa написал:
ошибка осталась
потому что читали не внимательно: = IFERROR(VLOOKUP(E6,IF('ЛИСТ 1'!B3:B100=C12,'ЛИСТ 1'!A3:Z100,""""),5,0),""-"")
Изменено: buchlotnik - 20.02.2019 11:26:25
Соблюдение правил форума не освобождает от модераторского произвола
 
Действительно) спасибо большое) вставляет)
Можно еще вопрос один) таким образом я заполнила столбец C, в остальных столбцах  форумлы однообразные с единственным изменяемым параметром в строке 12, можно как-то автоматически их вставлять в столбцы D:T на основе этих формул?
Изменено: Kcuxa_xa - 20.02.2019 11:47:50
 
Цитата
таких формул порядка 500 в отчете, что очень тормозит работу когда работаю
Ну раз уж решили сделать макросом, то можно вообще отказаться от формул? сделать всё макросом
 
Можно) но боюсь не справлюсь)))))
 
Цитата
Kcuxa_xa написал:
форумлы однообразные
наверняка можно, если бы увидеть примеры хотя бы 3 - 5 этих однообразных формул
Соблюдение правил форума не освобождает от модераторского произвола
 
Да конечно вот пример, правда пустой без информации
Изменено: Kcuxa_xa - 20.02.2019 12:18:57
 
Цитата
Kcuxa_xa написал:
я заполнила столбец C, в остальных столбцах  форумлы однообразные с единственным изменяемым параметром в строке 12, можно как-то автоматически их вставлять в столбцы D:T на основе этих формул?
вместо:
Код
    Range("C12").FormulaLocal = "=ИНДЕКС(Автотранспорт!$A:$A;3;1)"
    Range("D12").FormulaLocal = "=ИНДЕКС(Автотранспорт!$A:$A;4;1)"
    Range("E12").FormulaLocal = "=ИНДЕКС(Автотранспорт!$A:$A;3;1)"
    Range("F12").FormulaLocal = "=ИНДЕКС(Автотранспорт!$A:$A;3;1)"
    Range("G12").FormulaLocal = "=ИНДЕКС(Автотранспорт!$A:$A;3;1)"
    Range("H12").FormulaLocal = "=ИНДЕКС(Автотранспорт!$A:$A;3;1)"
    Range("I12").FormulaLocal = "=ИНДЕКС(Автотранспорт!$A:$A;3;1)"
    Range("J12").FormulaLocal = "=ИНДЕКС(Автотранспорт!$A:$A;3;1)"
    Range("K12").FormulaLocal = "=ИНДЕКС(Автотранспорт!$A:$A;3;1)"
    Range("L12").FormulaLocal = "=ИНДЕКС(Автотранспорт!$A:$A;3;1)"
    Range("M12").FormulaLocal = "=ИНДЕКС(Автотранспорт!$A:$A;3;1)"
    Range("N12").FormulaLocal = "=ИНДЕКС(Автотранспорт!$A:$A;3;1)"
    Range("O12").FormulaLocal = "=ИНДЕКС(Автотранспорт!$A:$A;3;1)"
    Range("P12").FormulaLocal = "=ИНДЕКС(Автотранспорт!$A:$A;3;1)"
    Range("Q12").FormulaLocal = "=ИНДЕКС(Автотранспорт!$A:$A;3;1)"
    Range("R12").FormulaLocal = "=ИНДЕКС(Автотранспорт!$A:$A;3;1)"
    Range("S12").FormulaLocal = "=ИНДЕКС(Автотранспорт!$A:$A;3;1)"
    Range("T12").FormulaLocal = "=ИНДЕКС(Автотранспорт!$A:$A;3;1)"
введите:
Код
    Range("D12").Formula = "=INDEX(Автотранспорт!$A:$A,4,1)"
    Range("C12,E12:T12").Formula = "=INDEX(Автотранспорт!$A:$A,3,1)"
    Range("C12:T12").Value = Range("C12:T12").Value
 
Kcuxa_xa Поясните изначально Вашу задачу, не думая о том что сделано.
 
Спасибо всем кто отклинулся) я использовала метод AutoFill для остальных ячеек, все отлично! Всех благодарю за помощь
Страницы: 1
Наверх