Страницы: 1
RSS
Как избежать чтения/записи отдельно каждой ячейки в макросе, но с проверкой всех ячеек.
 
Здравствуйте, мастера и эксперты.

Цель: ускорить работу макроса в конкретной задаче.

В одной (желтой) ячейке - формула, которую нужно макросом копировать вниз на много-много строк. Например, на 99999. Но в некоторых других ячейках (на пути копирования) могут стоять ненулевые значения. Их менять НЕ надо.
Как заполнить  формулой из желтой все остальные ячейки без чтения проверки и записи отдельно каждой ?

Сейчас читаю, проверяю именно каждую. Это долго. Хотелось бы ускорить.
Подскажите плиз, если это возможно.
Изменено: vikttur - 23.09.2021 23:17:39
Компьютер никогда не заменит человека (©️ Hannibal Lecter)
 
Сергей Евдокимов, к целевому диапазону применить автофильтр и отфильтровать только пустые ячейки, только видимые ячейки заполнить формулой.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Доброе время суток.
С такой формулой и таким примером ;)  можно и так
Код
Public Sub test()
    Dim yellwCellFormula As String, destCells As Range, values, i As Long
    yellwCellFormula = Range("B2").Formula
    Set destCells = Range("B3:B1000")
    values = destCells.Value
    For i = 1 To UBound(values)
        If IsEmpty(values(i, 1)) Then values(i, 1) = yellwCellFormula
    Next
    destCells.Value = values
End Sub
Изменено: Андрей VG - 23.09.2021 16:43:53
 
Цитата
JayBhagavan написал:
применить автофильтр и отфильтровать только пустые ячейки
Чутка не подходит. Остальные ячейки могут быть не пустые, а с формулами. Их тоже нужно перезаписать.
Нельзя трогать только значения.
Компьютер никогда не заменит человека (©️ Hannibal Lecter)
 
Андрей VG, похоже, работает. Спасибо !
Очень уж вы оперативно )
Компьютер никогда не заменит человека (©️ Hannibal Lecter)
 
Цитата
Сергей Евдокимов написал:
похоже, работает
Не думаю, учитываю вдруг внезапно выскочившие уточнения :)
Цитата
Сергей Евдокимов написал:
а с формулами. Их тоже нужно перезаписать.
 
Андрей VG, а нее. Нет.
Надо б чтоб формулы в ячейках были.  А не значения с результатов их вычисления.
Словно "желтую" формулу потянули мышкой вниз )
Возможно ?

P/S/ Ваш код мне еще разбирать и разбирать для понимания. Быстро читать пока не умею.
Компьютер никогда не заменит человека (©️ Hannibal Lecter)
 
Цитата
Андрей VG написал:
учитываю вдруг внезапно выскочившие уточнения
Вроде указал
Цитата
Сергей Евдокимов написал:
Как заполнить  формулой из желтой все остальные ячейки без чтения проверки и записи отдельно каждой ?
Компьютер никогда не заменит человека (©️ Hannibal Lecter)
 
Код
Range("B2").Copy
Range("B100000") = 1
On Error Resume Next
With Range("B3:B99999")
    .SpecialCells(xlCellTypeFormulas).PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    .SpecialCells(xlCellTypeBlanks).PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
End With
On Error GoTo 0
    Application.CutCopyMode = False
Range("B100000").ClearContents
Изменено: БМВ - 23.09.2021 17:42:25
По вопросам из тем форума, личку не читаю.
 
Михаил, не пора ли в разработчики? Сколько можно админить? :)
 
Андрей VG,
нельзя смешивать хобби с работой :-)
По вопросам из тем форума, личку не читаю.
 
БМВ, ух-ты. Здорово. Работает.
Спасибо огромное. Моё почтение и восхищение мастерству.

P/S/ Сорри, что сразу не отреагировал. Внезапно до утра исчезло электричество.
Изменено: Сергей Евдокимов - 24.09.2021 04:17:17
Компьютер никогда не заменит человека (©️ Hannibal Lecter)
 
БМВ, подскажите пожалуйста, а зачем вы сначала ставите единицу
Код
Range("B100000") = 1
а затем ее стираете.
Код
Range("B100000").ClearContents
какую роль сие действие выполняет ? Не могу сообразить. Спасибо.
Компьютер никогда не заменит человека (©️ Hannibal Lecter)
 
SpecialCells в поисках указанных ячеек не выходят за рамки UsedRange
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Да, все верно пояснил Ігор Гончаренко, а так как нет уверенности, что последняя ячейка не константа то используем следующую, для расширения используемого диапазона. Можно конечно анализировать, но так проще.
По вопросам из тем форума, личку не читаю.
 
Ігор Гончаренко, БМВ, понял, спасибо.

БМВ, применил ваш код.
Код
... 
ws.Range("G5:G" & Cells(Rows.Count, 5).End(xlUp).Row).SpecialCells(xlCellTypeFormulas).PasteSpecial Paste:=xlPasteFormulas
ws.Range("G5:G" & Cells(Rows.Count, 5).End(xlUp).Row).SpecialCells(xlCellTypeBlanks).PasteSpecial Paste:=xlPasteFormulas
...

Ищу последнюю строчку сей конструкцией: Cells(Rows.Count, 5).End(xlUp).Row
Вроде, все прекрасно работает летает.
Компьютер никогда не заменит человека (©️ Hannibal Lecter)
 
Сергей Евдокимов, если есть на что операться, то можно и так. но в примере этого не было. В дюбом случае лучше так
Код
With ws.Range("G5:G" & Cells(Rows.Count, 5).End(xlUp).Row)
.SpecialCells(xlCellTypeFormulas).PasteSpecial Paste:=xlPasteFormulas
.SpecialCells(xlCellTypeBlanks).PasteSpecial Paste:=xlPasteFormulas
end with
По вопросам из тем форума, личку не читаю.
Страницы: 1
Наверх