Страницы: 1
RSS
Макрос любителя в макрос профессионала, Усовершенствование макроса.
 
Здравствуйте знатоки!
При помощи макрорекордера и написании формул решил создать макрос для определённой задачи. Я нуб в VBA и соответственно мой макрос далёк от совершенства как и само оформление, прошу не судить строго. Вопрос такой, а можно ли этот макрос написать более профессионально с небольшими комментариями? Очень буду признателен за помощь т.к. мною написанный макрос не только нубский, но и, я так подозреваю, будет тормозить на большой умной таблице. Спасибо!

Код
Sub Макрос3()
Range("I8:I" & Cells(Rows.Count, 4).End(xlUp).Row).Select
    Selection.FormulaR1C1 = "=IF(COUNTIF(R8C4:RC[-5],[@1])=1,VLOOKUP([@1],Таблица24,2,0),"""")"
        Selection.Copy
Range("I8:I" & Cells(Rows.Count, 4).End(xlUp).Row).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
Application.CutCopyMode = False
End Sub
 
Достаточно будет такого подхода:
Код
Sub Макрос3()
With Range("I8:I" & Cells(Rows.Count, 4).End(xlUp).Row).Select
    .FormulaR1C1 = "=IF(COUNTIF(R8C4:RC[-5],[@1])=1,VLOOKUP([@1],Таблица24,2,0),"""")"
    .Copy
    .PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End With
End Sub
Подробнее можете ознакомиться здесь: Select и Activate - зачем нужны и нужны ли?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Спасибо большое за уделённое время!!! Жаль только варианта решения нет с использованием возможностей самого VBA. Прописывание формул и перенос их в статическое значение наверняка не самый лучший вариант. Проблема в том, что эта часть кода COUNTIF(R8C4:RC[-5]... очень ресурсоёмкий и с большой умной таблицей подтормаживает. Но все ровно огромное спасибо и я обязательно ознакомлюсь с сылкой.
 
Цитата
написал:
Жаль только варианта решения нет с использованием возможностей самого VBA
Вариант есть, но для написания такого кода под Ваши конкретные нужды нужно вполне ощутимое кол-во времени потратить. А если учесть, что Вам еще и с комментариями надо - а это еще более ощутимее по времени. Небольшими? Насколько? Судя по Вашему уровню - небольшими здесь не обойтись. Плюс Вы совершенно неверно нашли проблему. COUNTIF работать будет все равно быстрее, чем такой же код, полностью перенесенный в VBA. А значит смысла писать более громоздкий код нет.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Там скорее проблема на в самой функцией СЧЁТЕСЛИ(), а в диапазоне, на который он ссылается. Я это имел ввиду. Диапазон динамически расширяется с каждой ячейкой, в которую прописывается формула. Ок, я Вас понял и Вам благодарен за помощь и за ссылку, с которой я ознакомился и почерпнул полезное для себя.
Изменено: sirius0211 - 21.07.2022 16:31:55
Страницы: 1
Наверх