написал: Удалить строки быстро можно: • МАКСИМАЛЬНО БЫСТРО: сформировав и выгрузив новый массив без "удаляемых" строк. Это не "удаление", но часто вполне подходит. • БЫСТРО для реального удаления: отсортировать по критерию удаления, чтобы удаляемые строки шли подряд одним блоком и удалить их.
Вот мне как раз новый массив бы сформировать вполне подошло бы. Хорошо если получится подправить код Iгор Гончаренко, для копирования и вставки на новый лист.
На малых файлах 2500 строк моментально делает На 600000+ все равно зависает, уже минут 5 Может лучше выбрать данные по критериям (60 и "Начальное сальдо") и вставить их в новый лист (файл) без форматирования? Это же должно быть быстрее ?
Не совсем понял почему убрали создание рабочего диапазона по формуле, (cкорее всего чтобы анализ/сравнение делать уже в массиве) Ошибку в критериях подправил 1 на 2 поменял
Код
Cr2 = arF(18, 1)
Но в результате у меня все рабочие строки просто стерлись (форматирование при этом осталось) . Что не так сделал? Для понимания пример на 370 строк вложил
P.S. Удалить нужно все строки не равные "60" и "Начальное сальдо" начиная с строки рабочего диапазона (9) и до конца таблицы
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, а отпуск на год априори не может быть больше кол-ва дней в году) следующий:
Да я бы и рад работать с расширенном функционалом, но PQ скорее всего у многих стоять не будет, что как бы делает его не очень удобным для применения в совместной работе в организации. Проще уж с макросом
Кстати, вопрос по VBA, (я не силен в написании, но код понимаю, если что не ясно уточняю синтаксис и разбираюсь и под себя могу подправить): Есть возможность запускать его автоматом по событию изменения (редактированию) рабочего диапазона (исходных данных) ? чтобы исключить кнопочку?
Спасибо за вариант Но нужно бы без PQ и VBA так как документ редактируемый другими пользователями в плане исходных данных, а макросы за частую на машинах пользователей отключены.
В целом решаемо Найти коды символов треугольников и согласно ваших условий их "рисовывать" в соседней ячейке через СИМВОЛ () А условное форматирование делать на ячейки с процентом и с треугольниками
Если в заголовке даты поставите вместо текста, а вид ячейки выставите дата с отображением месяца, то можно вот так сделать в своей первой ячейке и протянуть
Поиском не смог найти вариант без промежуточных столбцов Объект: график отпусков
Описание: Есть форма 1 (Таб. № повторяется в строках согласно количеству частей отпуска (макс. 4), столбцы - Таб.№ / кол-во дней / дата Есть форма 2 (Таб. № не повторяется, столбци идут парами - дата / кол-во, в соответствии частями отпуска (4 пары) Преобразование из формы 1 в форму 2 я сделал (через формулу массива)
Задача: Теперь нужно сделать преобразование из формы 2в форму 1 Без промежуточных столбцов (с ними я делаю таблицу с пропуском строк, затем избавляюсь от пустых строк).