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

Страницы: 1
автоматизация автофильтра, для выборки данных ультра-больших объёмов
 
Цитата
написал:
power query
потому что каждый лист содержит около 700 тысяч строк, а ограничение у Экселя - миллион+.
Код
let
    // Укажи путь к папке с файлами
    Папка = "C:\Путь\К\Вашей\Папке\",

    // Получаем все файлы в папке
    Источник = Folder.Files(Папка),

    // Оставляем только файлы .xlsx
    ТолькоXLSX = Table.SelectRows(Источник, each Text.EndsWith([Extension], ".xlsx")),

    // Добавляем содержимое первого листа каждого файла
    ДобавленныеДанные = Table.AddColumn(ТолькоXLSX, "Таблица", each Excel.Workbook([Content], false)),

    // Разворачиваем таблицы
    Развернуто = Table.ExpandTableColumn(ДобавленныеДанные, "Таблица", {"Data", "Item", "Kind"}, {"Data", "Item", "Kind"}),

    // Оставляем только листы (Kind = "Sheet")
    ТолькоЛисты = Table.SelectRows(Развернуто, each [Kind] = "Sheet"),

    // Оставим только данные с первого листа
    ТолькоПервыйЛист = Table.Group(ТолькоЛисты, {"Name"}, {{"ПервыйЛист", each Table.FirstN(_,1)}}),
    Расплющено = Table.Combine(Table.TransformColumns(ТолькоПервыйЛист, {"ПервыйЛист", each _[Data]{0}})),

    // Преобразуем в таблицу
    Заголовки = Table.PromoteHeaders(Rасплющено, [PromoteAllScalars=true]),

    // Фильтр по колонке "КОД"
    ТолькоКОД = Table.SelectRows(Заголовки, each 
        Text.StartsWith(Text.From([КОД]), "111") or
        Text.StartsWith(Text.From([КОД]), "222") or
        Text.StartsWith(Text.From([КОД]), "333"))
in
    ТолькоКОД

Как же power query их объединит?
Изменено: likbez - 08.05.2025 15:37:26
автоматизация автофильтра, для выборки данных ультра-больших объёмов
 
спросил у чатжпт, он написал макрос, который не работает корректно.
Код
Sub ОбъединитьФайлы()
    Dim папка As String
    Dim файлИмя As String
    Dim wbИсточник As Workbook
    Dim wbРезультат As Workbook
    Dim wsИсточник As Worksheet
    Dim wsРезультат As Worksheet
    Dim последнийРядок As Long
    Dim i As Integer
    Dim rngФильтр As Range
    Dim sht As Worksheet

    ' Установим путь к текущей папке (где находится эта книга)
    папка = ThisWorkbook.Path & "\"
    
    ' Откроем или создадим output.xlsx
    On Error Resume Next
    Set wbРезультат = Workbooks("output.xlsx")
    If wbРезультат Is Nothing Then
        Set wbРезультат = Workbooks.Open(папка & "output.xlsx")
    End If
    If wbРезультат Is Nothing Then
        Set wbРезультат = Workbooks.Add
        wbРезультат.SaveAs Filename:=папка & "output.xlsx"
    End If
    On Error GoTo 0
    
    ' Используем первый лист для вывода
    Set wsРезультат = wbРезультат.Sheets(1)
    wsРезультат.Cells.Clear
    
    ' Перебираем файлы от 01 до 10
    For i = 1 To 10
        файлИмя = Format(i, "00") & "-2024.xlsx"
        
        ' Проверим наличие файла
        If Dir(папка & файлИмя) <> "" Then
            Set wbИсточник = Workbooks.Open(папка & файлИмя, ReadOnly:=True)
            Set wsИсточник = wbИсточник.Sheets(1)
            
            ' Найдём последний рядок с данными
            Dim последняяСтрока As Long
            последняяСтрока = wsИсточник.Cells(wsИсточник.Rows.Count, 1).End(xlUp).Row
            
            ' Установим автофильтр
            Set rngФильтр = wsИсточник.Range("A1").CurrentRegion
            rngФильтр.AutoFilter Field:=1, Criteria1:=Array("111*", "222*", "333*"), Operator:=xlFilterValues
            
            ' Скопируем видимые строки, кроме заголовка если не первый файл
            If wsРезультат.Cells(1, 1).Value = "" Then
                rngФильтр.SpecialCells(xlCellTypeVisible).Copy
                wsРезультат.Cells(1, 1).PasteSpecial xlPasteValues
            Else
                последнийРядок = wsРезультат.Cells(wsРезультат.Rows.Count, 1).End(xlUp).Row + 1
                ' Копируем без заголовка
                rngФильтр.Offset(1, 0).Resize(rngФильтр.Rows.Count - 1).SpecialCells(xlCellTypeVisible).Copy
                wsРезультат.Cells(последнийРядок, 1).PasteSpecial xlPasteValues
            End If
            
            ' Отключим фильтр и закроем источник
            wsИсточник.AutoFilterMode = False
            wbИсточник.Close SaveChanges:=False
        End If
    Next i

    ' Сохраняем результат
    wbРезультат.Save
    MsgBox "Объединение завершено!"
End Sub

📌 Как использовать
Открой output.xlsx или создайте его вручную (можно пустым).

Открой Excel, нажми Alt + F11 (откроется редактор VBA).

Вставь код в модуль (Insert > Module).

Нажми F5 или запусти макрос ОбъединитьФайлы.

Убедись, что все файлы 01-2024.xlsx ... 10-2024.xlsx находятся в той же папке, что и output.xlsx.
Изменено: likbez - 08.05.2025 15:21:54
автоматизация автофильтра, для выборки данных ультра-больших объёмов
 
Очень необходима подсказка знающих людей:
В одной папке на диске есть 10 файлов *.xls*, в каждом - по одному листу, с таблицей одинаковой структуры: 25 колонок х 700 тысяч рядов (+-). (это статистические данные за разные годы).
Стоит задача - делать выборки по одному из полей (числовое, 10 цифр) сразу же нескольких значений - а результат сохранять последовательно в отдельную таблицу. Вручную это все работает через автофильтр - копирование в буфер - вставка в таблицу, но процесс долгий и скучный. Как это оптимизировать? Может - макрос мог бы выполнить такие действия:
  • открыть файл 01-2024.xlsx,
  • отфильтровать первый лист по первой колонке с заголовком в первой ячейке "КОД" значения "111111*" или "22222222*" или "33333333*",
  • результат скопировать на чистый лист в файле output.xlsx в этой же папке,
  • закрыть файл,
  • открыть файл 02-2024.xlsx,
  • .... повторить все действия, вставляя результаты на тот же лист в файле output.xlsx со следующей свободной строки... и так - до файла 10-2024.xlsx.
Как лучше реализовать такой алгоритм действий?
конвертировать большие файлы *.xlsx в базу MS Access 2010, + добавить простую форму запроса
 
Цитата
doober написал:
Вот что пишут умные люди.
Знаем, читали, но не работают эти инструкции: про попытке подключить файл *.xls выдаёт: http://prntscr.com/10iz3ce
*.xlsx не видит вообще, а если ПЕРЕсохранить в *.xls - тогда, во-первых - при подключении источника-Эксель-файла выдаёт "ошибка DAO код:3275" CronosPlus 3.00.185, а CronosPro 5.0.11003 импортирует только первые 65535 строк, и даже в них некоторые колонки - пустые.
Изменено: likbez - 12.03.2021 11:51:20
конвертировать большие файлы *.xlsx в базу MS Access 2010, + добавить простую форму запроса
 
Цитата
doober написал:
при помощи  Server Management Studio, если хватит мощи
а можно ли то же самое - но не в Access, а в Cronos?
конвертировать большие файлы *.xlsx в базу MS Access 2010, + добавить простую форму запроса
 
поставить можно, но исходные данные в 60 файлах Экселя, как их в два клика перегнать в базу MS SQL ?
конвертировать большие файлы *.xlsx в базу MS Access 2010, + добавить простую форму запроса
 
а в Cronos ?
конвертировать большие файлы *.xlsx в базу MS Access 2010, + добавить простую форму запроса
 
есть 60 однотипных однолистовых файлов в формате *.xlsx (в среднем по 500 тыс. строк и 15 столбов каждый).
необходимо разово сконвертировать всех их в новую базу MS Access 2010 и добавить туда простой запрос (либо форму), чтобы пользователь мог ввести одно (или несколько) значений (в т.ч. с масками - например Like "*7777*" Or Like "*1234*") и получить отфильтрованные данные.
+ необходимо предусмотреть возможность простого дополнения базы точно такими же новыми таблицами в будущем.
выбор строк по ряду значений на разных листах
 
а  может вам известно какое-нибудь готовое решение, чтобы это автоматизировать? есть в одной папке однотипные файлы - 60 шт, в каждом по 1 листу с одинаковыми колонками, но разным количеством строк (200 тыс... 300 тыс.). Может - есть такие макросы, которые могут открывать все файлы последовательно, выбирать оттуда один и тот же диапазон значений и сохранять выборку в один отдельный файл, создавая для каждого проработанного файла отдельный одноименный лист?
выбор строк по ряду значений на разных листах
 
да, здесь были ошибки в диапазонах, но в оригинальной таблице все-равно не находит значения с * и ?, наверное - там тоже необходимо все числа перевести в текст?
выбор строк по ряду значений на разных листах
 
Цитата
a.i.mershik написал:
а поставте диапазон условий С А1:С4
тогда вообще не фильтрует:
 
выбор строк по ряду значений на разных листах
 
Цитата
a.i.mershik написал:
может мы говорим о разном?
вот и в этом файле не работает же:
 
выбор строк по ряду значений на разных листах
 
Цитата
a.i.mershik написал:
все просто работает и никаких проблем для одного листа...
работает, если значениями являются целые числа, а если 777* - то не работает.
выбор строк по ряду значений на разных листах
 
Цитата
a.i.mershik написал:
уровней условий в расширеном фильтре
через расширенный не работает, это было испробовано в первую очередь. имел ввиду уровни в пользовательском автофильтре:
 
выбор строк по ряду значений на разных листах
 
Цитата
a.i.mershik написал:
это вопрос по теме????
это был не вопрос, а утверждение.
а по теме - предложенное вами решение действительно работает на крохотной таблице-образце, но как только добавил этот макрос к листу на 230 000 строк в 56 колонах - Эксель вообще "слетел с катушек": курсор исчез, выделить ячейки нельзя - и в строке формул с высокой частотой мигает содержимое текущей ячейки. ожидание и перезагрузки компа не помогли.
неужели никто не знает, как просто добавить количество уровней условий в стандартном фильтре? там 2, а нужно 6.
выбор строк по ряду значений на разных листах
 
Цитата
a.i.mershik написал:
результат по макросу
инструмент PLEX, наверное, отличный, но при попытке объединить первые (одинаковые) из несколько файлов в один - выдает ошибку:
выбор строк по ряду значений на разных листах
 
нет, я понял, что макрос - это лишь альтернатива. делал просто через диалоговое окно. а разве Excel без макросов не умеет фильтровать данные? сейчас еще раз всё перечитаю, спасибо.
выбор строк по ряду значений на разных листах
 
Цитата
a.i.mershik написал:
преобразовал товар в текст с помощью надстройки PLEX
plex 2017.2.  преобразовал также, но не находит:
что я делаю не так?
выбор строк по ряду значений на разных листах
 
Благодарен за подсказку, plex есть, хотя никогда не пользовал. А может он еще и умеет автоматизировать этот процесс для нескольких десятков таких однотипных файлов или листов?
выбор строк по ряду значений на разных листах
 
Цитата
a.i.mershik написал:
мне кажется подойдет Вам расширенный фильтре ссылка:  https://www.planetaexcel.ru/techniques/2/197/
проблема в том, что это работает только для полных значений - без * и ?
выбор строк по ряду значений на разных листах
 
Цитата
Юрий М написал:
В сообщении про организации, а в файле поиск по коду товара.
да, простите за невнимательность: это 2 практически одинаковых задачи в этой таблице: иногда нужно искать группу организаций по их кодах (до 8 цифр), иногда - группы товаров - по их кодах (до 10 цифр). но суть задачи та же.
выбор строк по ряду значений на разных листах
 
странно: при публикации форум выдает "файлы <00000> не найдены"
выбор строк по ряду значений на разных листах
 
Цитата
Казанский написал:
Тогда Excel - неподходящий для вас инструмент. В один "прекрасный" день это все рухнет.
Вы конечно же правы, но это не мне решать; данные поступают в Экселе и их необходимо оперативно обрабатывать. Хотя бы искать 20..30 позиций одновременно в рамках одного листа с 300+ тыс. строк.
выбор строк по ряду значений на разных листах
 
привожу в качестве пример ОЧЕНЬ маленький фрагмент таблицы (реально в ней 300 тысяч строк в 50 колонках) и нужно искать одновременно не 3 значения, а иногда и 20-30. Тип ячейки с искомыми значениями менять на числовой и текстовой тоже пробовал - не помогло.   :(  
выбор строк по ряду значений на разных листах
 
как заставить работать самый стандартный метод - Данные -- Дополнительно -- Расширенный фильтр -- Диапазон условий --- далее выделяем несколько ячеек з числами типа 6666666666, 7777*, 888888888? - жмем ОК - и фильтр находит только 6666666666 ?  
выбор строк по ряду значений на разных листах
 
забыл важный момент: слияние всех листов в один - не вариант, так как быстро упираемся в ограничение всех актуальных версий Экселей: 1 048 576 строк на 1 лист. а у нас есть файлы где 10 листов по 500 тысяч строк - то есть - 5 миллионов.
автоматизировать выбор статистических данных в строках в однотипных листах книги
 
ответил туда же. странно, что так медленно

забыл важный момент: слияние всех листов в один - не вариант, так как быстро упираемся в ограничение всех актуальных версий Экселей: 1 048 576 строк на 1 лист. а у нас есть файлы где 10 листов по 500 тысяч строк - то есть - 5 миллионов.
Изменено: likbez - 14.03.2018 17:13:32
автоматизировать выбор статистических данных в строках в однотипных листах книги
 
спрашивал об этом в другой ветке форума, ожидая получить подсказку и сделать всё самостоятельно, но никто так и не ответил, поэтому мы готовы оплатить такое решение:
есть книга с 10 листами по 150 тыс.строк и 30 колон. В одной из колонок - код организации - 6, 7 и 8-разрядный.
необходимо сделать сквозную выборку строк (операций) 100 организаций по всем (однотипным) листам одновременно и сохранить результат в отдельный файл с названием соответствующим кодом организации; список из 100 кодов этих организаций - на отдельном листе.
необходимо решение, которое мы сможем в дальнейшем модифицировать и использовать для других файлов (то есть периодов, типов операций, кодов товаров вместо кодов компаний и т.п.). скорее всего - это несложный макрос, но у нас нет программистов на VBA, чтобы его грамотно написать.
решение необходимо в крайне короткий срок.
выбор строк по ряду значений на разных листах
 
есть книга с 10 листами по 150 тыс.строк и 30 колон. В одной из колонок - код организации - 6, 7 и 8-разрядный.
необходимо сделать сквозную выборку строк (операций) 100 организаций по всем (однотипным) листам одновременно и сохранить результат в отдельный файл с названием соответствующим кодом организации; список из 100 кодов этих организаций - на отдельном листе.
как это возможно автоматизировать?
как просто сделать выборку через расширенный фильтр, в "умных" инструкциях описано, но не работает
 
в "умных" инструкциях описано - как просто сделать выборку через расширенный фильтр - например - всех строк, в которых в одном столбце значения начинаются с...:

".... Настроим фильтр для отбора строк, которые содержат в наименовании Товара значения начинающиеся со слова Гвозди. Этому условию отбора удовлетворяют строки с товарами гвозди 20 мм, Гвозди 10 мм, Гвозди 10 мм и Гвозди.

Табличку с условием отбора разместим разместим в диапазоне А1:А2. Табличка должна содержать также название заголовка столбца, по которому будет производиться отбор. В качестве критерия в ячейке А2 укажем слово Гвозди."

в нашем случае - значения, в основном, числа, перепробовали многое - объявляли их и числовыми, и текстовыми, и брали в разные типы кавычек, и даже писали ="777"  - но никак и ничего не находит. как это лечить?
Страницы: 1
Наверх