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

Страницы: 1
Массовое удаление строк по заданному массиву слов, VBA, макрос
 
Цитата
написал:
Удалить строки быстро можно:     • МАКСИМАЛЬНО БЫСТРО: сформировав и выгрузив новый массив без "удаляемых" строк. Это не "удаление", но часто вполне подходит.     • БЫСТРО для реального удаления: отсортировать по критерию удаления, чтобы удаляемые строки шли подряд одним блоком и удалить их.
Вот мне как раз новый массив бы сформировать вполне подошло бы.
Хорошо если получится подправить код Iгор Гончаренко,  для копирования и вставки на новый лист.
Изменено: Данис М - 26.04.2022 15:36:32
Массовое удаление строк по заданному массиву слов, VBA, макрос
 
Цитата
написал:
сейчас испытаю отпишусь.
На малых файлах 2500 строк моментально делает
На 600000+ все равно зависает, уже минут 5
Может лучше выбрать данные по критериям (60 и "Начальное сальдо") и вставить их в новый лист (файл) без форматирования?
Это же должно быть быстрее ?  
Массовое удаление строк по заданному массиву слов, VBA, макрос
 
сейчас испытаю отпишусь.
Изменено: Данис М - 26.04.2022 12:47:32
Массовое удаление строк по заданному массиву слов, VBA, макрос
 
Цитата
написал:
пробуйте
Делает выделение как у меня раньше делал
Код
'If Not Strs2 Is Nothing Then Strs2.Select 'выделить
А мне нужно удалять, что в своей версии я сразу и делал (на тестовых файлах 2500 строк удало быстро 3-5 сек)
Код
If Not Strs2 Is Nothing Then Strs2.Delete Shift:=xlUp 'удалить со свигом вверх
Ваш код при попытке выделение на файле 600000 тоже зависает...
Массовое удаление строк по заданному массиву слов, VBA, макрос
 
Цитата
написал:
А выложите файл в формате xlsx.
еще xlsm добавил
Массовое удаление строк по заданному массиву слов, VBA, макрос
 
МатросНаЗебре,

Не совсем понял почему убрали создание рабочего диапазона по формуле, (cкорее всего чтобы анализ/сравнение  делать уже в массиве)
Ошибку в критериях подправил 1 на 2 поменял
Код
Cr2 = arF(18, 1)

Но в результате у меня все рабочие строки просто стерлись (форматирование при этом осталось) .
Что не так сделал?
Для понимания пример на 370 строк вложил

P.S. Удалить нужно все строки не равные "60" и "Начальное сальдо"  начиная с строки рабочего диапазона (9) и до конца таблицы
Изменено: Данис М - 26.04.2022 07:40:20
Массовое удаление строк по заданному массиву слов, VBA, макрос
 
Знатоки VBA
Чтобы не плодить новую тему, спрошу тут.
Изучая вопрос пробовал для своей задачи код из последних постов из схожей темы "Выделение не связанных диапазонов (строки) - VBA"

Код
Prepare
' задаем начальные значения
c1 = Range("K9").Column 'столбец рабочего диапазона
r1 = Range("K9").Row 'начальная строка рабочего диапазона
r2 = ActiveSheet.Cells.Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row 'конечная строка рабочего диапазона
' создание рабочего диапазона по формуле
    Range("K9").Select
    ActiveCell.Formula = "=IF(F9="""",K8,F9)"
    Range("K9").Select
    Selection.AutoFill Destination:=Range("K9:K" & r2)
Ended
Сr1 = Range("K9").Value '1 критерий
Сr2 = Range("K18").Value '2 критерий
    
Prepare
    For iSt = r2 To r1 Step -1
        If (Cells(iSt, c1) <> Сr1 And Cells(iSt, c1) <> Сr2) Then Set Strs = Rows(iSt)
        If Strs2 Is Nothing Then Set Strs2 = Strs Else Set Strs2 = Union(Strs2, Strs)
    Next iSt

'Debug.Print Strs2.Address 'посмотреть диапазоны адресов
'If Not Strs2 Is Nothing Then Strs2.Select 'выделить
If Not Strs2 Is Nothing Then Strs2.Delete Shift:=xlUp 'удалить со свигом вверх
Ended

Где : Prepare, Ended - функции ускорение (вкл/выкл)
На 2000-3000 работает быстро, на 600000 строк все подвисает (и это не устраивает).

Подскажите в какую сторону смотреть???
Создание списка из таблицы по условию (наличию значений в столбцах), конвертировать вид таблиц (графиков отпусков из одного вида в другой и обратно)
 
Цитата
написал:
Где я ошибаюсь? Как можно уменьшить в два раза число выводимых ?  (менять местами столбцы ставить сначала даты, потом  тоже не самый лучший вариант)

Сам спросил, сам отвечаю ))

1 вариант по значению (т.к. число современных дат в EXCEL гораздо больше 365, а отпуск на год априори не может быть больше кол-ва дней в году) следующий:
Код
=ЕСЛИОШИБКА(ИНДЕКС($F$4:$F$93;НАИМЕНЬШИЙ(ЕСЛИ(($G$4:$N$93<>"")*($G$4:$N$93>365);СТРОКА($F$4:$F$93)-СТРОКА($F$3);"");СТРОКА()-СТРОКА($F$3)));"")
2 вариант по номеру столбцы (в моем случае по чётности столбца, но если чередований больше 2 то можно и через ОСТАТ проверять следующий):
Код
=ЕСЛИОШИБКА(ИНДЕКС($F$4:$F$93;НАИМЕНЬШИЙ(ЕСЛИ(($G$4:$N$93<>"")*ЕЧЁТН(СТОЛБЕЦ($G$4:$N$93));СТРОКА($F$4:$F$93)-СТРОКА($F$3);"");СТРОКА()-СТРОКА($F$3)));"")

Буду использовать скорее всего 2 вариант.

Всем неравнодушным спасибо!  
Создание списка из таблицы по условию (наличию значений в столбцах), конвертировать вид таблиц (графиков отпусков из одного вида в другой и обратно)
 
Продолжаю мучать без макросов и PQ
Дошел до формул массива
Если отбирать табельные номера по условию непустых значений,
Код
=ИНДЕКС($F$4:$F$93;НАИМЕНЬШИЙ(ЕСЛИ(($G$4:$N$93<>"");СТРОКА($F$4:$F$93)-3;"");СТРОКА()-3))
То по целому массиву получается в два раза больше (так как столбцы чередуются)

Если Склеить условие
Код
=ИНДЕКС($F$4:$F$93;НАИМЕНЬШИЙ(ЕСЛИ(($G$4:$G$93<>"")+($I$4:$I$93<>"")+($K$4:$K$93<>"")+($M$4:$M$93<>"");СТРОКА($F$4:$F$93)-3;"");СТРОКА()-3))
или массив
Код
=ИНДЕКС($F$4:$F$93;НАИМЕНЬШИЙ(ЕСЛИ(($G$4:$G$93&$I$4:$I$93&$K$4:$K$93&$M$4:$M$93<>"");СТРОКА($F$4:$F$93)-3;"");СТРОКА()-3))
Результат выводится по одному значению

Где я ошибаюсь?
Как можно уменьшить в два раза число выводимых ?  (менять местами столбцы ставить сначала даты, потом  тоже не самый лучший вариант)
Создание списка из таблицы по условию (наличию значений в столбцах), конвертировать вид таблиц (графиков отпусков из одного вида в другой и обратно)
 
Хорошо бы классическим способом сделать...
Буду пробовать дальше...  
Создание списка из таблицы по условию (наличию значений в столбцах), конвертировать вид таблиц (графиков отпусков из одного вида в другой и обратно)
 
Цитата
написал:
А почему PQ не подходит?
Да я бы и рад работать с расширенном функционалом, но PQ скорее всего у многих стоять не будет, что как бы делает его не очень удобным для применения в совместной работе в организации.
Проще уж с макросом

Кстати, вопрос по VBA, (я не силен в написании, но код понимаю, если что не ясно уточняю синтаксис и разбираюсь и под себя могу подправить):
Есть возможность запускать его автоматом по событию изменения (редактированию) рабочего диапазона (исходных данных) ? чтобы исключить кнопочку?  
Заполнение таблицы с простоями в зависимости от даты
 
А как переходящий простой считаете? до конца суток? остальной перенесется на простой следующего числа?

Без ответа на эти вопросы корректно учет не сможете вести.

Ремонт гидросистемы09.11.2021 21:0110.11.2021 7:3910,7
Предупредительный ремонт09.11.2021 21:0010.11.2021 7:3910,7
Резерв09.11.2021 21:0010.11.2021 7:3910,7
Зачистказачистка09.11.2021 20:0010.11.2021 7:5912,0
Ремонт рабочего оборудованиятечь пульпы на   винцовую шестерню, трещина в корпусе09.11.2021 20:0010.11.2021 7:5912,0
Съем электролизерарезерв09.11.2021 20:0010.11.2021 5:5910,0
Создание списка из таблицы по условию (наличию значений в столбцах), конвертировать вид таблиц (графиков отпусков из одного вида в другой и обратно)
 
C макросом уже лучше, спасибо.
Но буду искать решения классикой дальше )  
Создание списка из таблицы по условию (наличию значений в столбцах), конвертировать вид таблиц (графиков отпусков из одного вида в другой и обратно)
 
Спасибо за вариант
Но нужно бы без PQ и VBA так как документ редактируемый другими пользователями в плане исходных данных, а макросы за частую на машинах пользователей отключены.
Шаблон коммерческого предложения
 
Цитата
написал:
необходимо исходные данные преобразовать в "умную таблицу", тогда все будет работать
Можно динамический диапазон через СМЕЩ сделать, тоже удобно (не все умные таблицы знают и воспринимают)

Код
=СМЕЩ('База материалов'!$B$3;;;СЧЁТЗ('База материалов'!$B:$B))
Изменено: Данис М - 12.11.2021 01:02:03
процент от числа с условиями и условным форматированием
 
В целом решаемо
Найти коды символов треугольников и согласно ваших условий их "рисовывать" в соседней ячейке через СИМВОЛ ()
А условное форматирование делать на ячейки с процентом и с треугольниками  
Просуммировать значения для каждого конкретного месяца
 
Если в заголовке даты поставите вместо текста, а вид ячейки выставите дата с отображением месяца, то можно вот так сделать в своей первой ячейке и протянуть
Код
=СУММЕСЛИМН(Лист2!$C:$C;Лист2!$B:$B;">="&B$1;Лист2!$B:$B;"<"&(КОНМЕСЯЦА(B$1;0)+1);Лист2!$A:$A;Лист1!$A2)
Создание списка из таблицы по условию (наличию значений в столбцах), конвертировать вид таблиц (графиков отпусков из одного вида в другой и обратно)
 
Поиском не смог найти вариант без промежуточных столбцов
Объект: график отпусков

Описание:
Есть форма 1 (Таб. № повторяется в строках согласно количеству частей отпуска (макс. 4), столбцы - Таб.№ / кол-во дней / дата
Есть форма 2 (Таб. № не повторяется, столбци идут парами - дата / кол-во, в соответствии частями отпуска (4 пары)
Преобразование из формы 1 в форму 2 я сделал (через формулу массива)

Задача:
Теперь нужно сделать преобразование из формы 2 в форму 1
Без промежуточных столбцов (с ними я делаю таблицу с пропуском строк, затем избавляюсь от пустых строк).
Страницы: 1
Наверх