Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Необходимо при печати напечатать данные из первого столбца на каждой странице, Необходимо при печати напечатать данные из первого столбца на каждой странице
 
Решение в приложении
Изменено: Владимир Волох - 27.05.2021 09:51:37
VBA. Удаление строк, содержащих определенный текст, Прошу помочь дописать макрос
 
Предварительная сортировка  перед удалением разве даст увеличение скорости удаления строк?

С автором никак не связан. Просто решал подобную задачу и хотел показать нецелесообразность в больших массивах применение примитивного перебора и сравнения в циклах. Если автор пишет, что объем будет более 100 тысяч строк то работа его макроса это чрезвычайно долгий процесс.
VBA. Удаление строк, содержащих определенный текст, Прошу помочь дописать макрос
 
Масштабировал файл до 100 тыс. строк. В общем как я и ожидал, циклоперебор - мертвая идея.
Запустил на пробу минут 40 назад, до сих пор фильтрация не отработала.

Гораздо веселее вариант через фильтр. Фильтр на 100 тыс. строк отрабатывает 0,3 секунды!!!!!!!
Удаление 94184 строк - 90 секунд. Долго, но может есть варианты. Я использовал самый прямой - по записи макроса.
Фильтр нужно использовать расширенный. Но в целом в сам макрос от тоже вписывается.

Описание как использовать расширенный фильтр находится здесь https://excel2.ru/articles/rasshirennyy-filtr-v-ms-excel

Макрос приведенный ниже конечно сырой, требует доработки но для эксперимента сгодится.
Код
Sub Макрос1()
'    Application.ScreenUpdating = False 'выключаем обновление экрана для ускорения работы

    t1 = Timer
    
    Range("A13").Select
    Application.CutCopyMode = False
    Rows("11:100000").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
        Range("C1:C2"), Unique:=False
    Rows("12:12").Select
    Range(Selection, Selection.End(xlDown)).Select
    
    t2 = Timer - t1
    
    MsgBox "Обработка данных продолжалась  " & t2 & " сек.", vbInformation
    t3 = Timer
    Rows("12:12").Select
    Range(Selection, Selection.End(xlDown)).Select
        Selection.Delete Shift:=xlUp
        
    MsgBox "Удаление данных продолжалась  " & Timer - t3 & " сек.", vbInformation
'    Application.ScreenUpdating = True        
End Sub
VBA. Удаление строк, содержащих определенный текст, Прошу помочь дописать макрос
 
Добрый день!

Без претензий к вышенаписанному макросу, но не проще ли строки к удалению выбрать автофильтром? И потом оптом удалить ненужные строки? Тем более в примере автофильтр уже применен (включен).

В итоге код сократится до 4 строк:
Код
ActiveSheet.Range("$A$1:$AV$70").AutoFilter Field:=9, Criteria1:=Array("ду", "му00", "абк", "атс", "гств", "удтс", "тдчс", "пмп"), Operator:=xlFilterValues
Rows("5:71").Select
Selection.Delete Shift:=xlUp
ActiveSheet.Range("$A$1:$AV$67").AutoFilter Field:=9
 
Данный код записан макрорекордером и думаю при желании профи могут его еще больше сократить.
Как в макросе перейти на ячейку по ссылке указанной в формуле?
 
Всем большое спасибо. Способ предложенный БМВ это фактически и есть то, что я искал.
по остальным способам тоже интересно в плане развития. Сразу показывают насколько я чайник  :cry:  
Как в макросе перейти на ячейку по ссылке указанной в формуле?
 
Почему?
Как в макросе перейти на ячейку по ссылке указанной в формуле?
 
Достаточно простой вопрос. Я думаю программисты с подобным неоднократно сталкиваются.

На листе "Расчет" в ячейке К12 находится сумма. На листе "Сводная" в ячейке C6 ссылка на предыдущее число.
То есть
Код
 Range("С6").Formula
показывает
Код
"=Расчет!K12"

Макрос бежит по столбцу С листа "Сводная" и натыкается на сумму. Для корректной обработки мне необходимо перейти к ячейке на листе "Расчет" сдвинутьcя на одну ячейку вправо и взять параметр находящийся в ячейке "Сводная!L12".
Я могу с помощью текстовых операторов (right, left и др.) разделить  Range("С6").Formula на название листа и координаты ячейки. Но не могу сообразить как название и координаты  внести в макрос, чтобы он заработал.

Пробую Shteets(N).Activate, где N = "Расчет" - выдает ошибку. С координатами та же ерунда.

Подскажите, как мне туда прыгнуть? Может есть простой путь?
Работа с формами
 
Есть форма1 - Главное меню  
которая открывает Форму 2,3,4 и т.д.  
 
При выборе кнопки формы 2,3,4 открывается нужный лист.  
Для возможности его редактирования Форма 1 и Форма 2 переводятся в режим Hide.  
 
После редактирования данных на листе нажимается кнопка при которой лист становится невидимым.  
 
 
Хочется миниатюрную процедуру  
1. Скрыть все формы методом Hide (причем название 1 формы всегда одно и тоже, названия других форм меняются).  
2. После скрытия листа открыть все активные формы методом Show  
 
Посоветуйте, что делать?  
 
а то не хочется писать кучу таких процедур для каждой субформы.  
 
Sub скрыть()  
АДОП1.Hide  
UserForm2.Hide  
End Sub
Работа с формами
 
Спасибо за помощь. Все оказалось просто.
Работа с формами
 
Начал изучать работу с формой  
Наткнулся на такую проблему.  
 
Есть много скрытых листов.  
Первая форма - главное меню которая  вызывает вторую форму.  
 
При нажатии кнопки 2 формы необходимо    
отобразить лист, и дать возможность в нем внести данные.  
 
Private Sub CommandButton1_Click()  
Sheets("Лист1").Visible = -1  
Sheets("Лист1").Select  
Range("C5").Select  
End Sub  
 
На листе есть своя кнопка, которая будет скрыать лист после внесения данных.  
 
Проблема в том что с листом ничего не сделать пока открыты обе формы.  
 
Хотелось бы после внесения данных в лист возвращаться в форму 2.  
 
Надеюсь что понятно сказал :)  
 
Посоветуйте где почитать про работу с формами. Все что нашел очень мало.  
И еще маленький вопрос. В кнопках формы текст встает в центре кнопки. Есть ли возможность группировать текст по левому краю кнопки?    
Тоже не нашел как это сделать.
Перечислить все чекбоксы на листе
 
Обалдеть.    
 
Даже не знал где искать.  
 
 
Спасибо огромное.
Перечислить все чекбоксы на листе
 
На листе 15 чекбоксов с номера 1 по 15.  
 
Необходимо выполнить такой цикл  
 
   For s = 1 To 15  
   Н = H + 3  
       If CheckBox1.Value = "True" Then  
           Range("H" & H).Value = Range("D" & R).Value  
           Range("H" & H + 1).Value = Range("E" & R).Value  
           Range("H" & H + 2).Value = Range("F" & R).Value  
       Else  
           Range("H" & H).Value = 0  
           Range("H" & H + 1).Value = 0  
           Range("H" & H + 2).Value = 0  
       End If  
   Next s  
 
Как мне в цикле указать названия чекбоксов чтобы их номера корректно менялись по параметру S. (3 строка цикла).  
 
Заранее спасибо.
Скролл листа с помощью мыши
 
Немного тупой вопрос.  
 
Сейчас начал работать в 2007 Excel. Заметил неприятную штуку. Когда проверяешь формулу, т.е. щелкаешь на ней, то происходит  подсветка всех адресов и диапазонов. Раньше в старой версии сам лист в таком режиме можно было спокойно крутить колесиком мыши (очень удобно). А сейчас только полосой прокрутки. Т.е. наводишь на полоску мышку и таскаешь курсор прокрутки.  
 
Есть советы и рекомендации по устранению данной проблемы?
Помогите с микромакросом :)
 
{quote}{login=The_Prist}{date=24.09.2010 11:55}{thema=}{post}Попробуйте строку:  
formula = Replace(formula, ".", ",")  
 
Заменить на formula = Replace(formula, ",", "."){/post}{/quote}  
 
 
Огромное спасибо.  
 
Подсказка помогла.  
 
Еще раз спасибо.
Помогите с микромакросом :)
 
{quote}{login=The_Prist}{date=24.09.2010 11:49}{thema=}{post}Я неверно понял. Почти 100%, что у Вас в получившейся формуле присутсвуют знаки, которые там быть не должны. Или наоборот - каких-то не хватает.  
 
Что такое "нов"? Это именованная формула? Тогда где текст этой формулы?{/post}{/quote}  
 
нов это просто иеннованная ячейка.  
 
В ней стоит просто цифра 3,13
Помогите с микромакросом :)
 
{quote}{login=The_Prist}{date=24.09.2010 11:46}{thema=}{post}ActiveCell.formula = "'=" & formula{/post}{/quote}  
 
пробовал. Не выходит. Ошибка 400.
Помогите с микромакросом :)
 
В ячейке excel находится такая формула    
="(80,91+0,32*9)*1,1*" & нов  
отображается как (80,91+0,32*9)*1,1*3,13  
 
необходимо в соседней ячейке выдать результат вычисления  
 
Написал микромакрос:  
   Dim formula As String  
   ActiveCell.Offset(0, -1).Range("A1").Select  
   formula = ActiveCell.FormulaR1C1  
   ActiveCell.Offset(0, 1).Range("A1").Select  
   formula = Replace(formula, ".", ",")  
   formula = Replace(formula, "=", "")  
   formula = Replace(formula, Chr(34), "")  
   formula = Replace(formula, "&", "")  
   formula = Replace(formula, " ", "")  
   ActiveCell.formula = formula  
 
вставляет текст формулы  
 
получается так (80,91+0,32*9)*1,1*нов  
 
если последнюю строку заменить на ActiveCell.formula = "=" & formula  
то выдает ошибку 400.  
 
Что можно сделать?
Страницы: 1
Наверх