Страницы: 1
RSS
Получение списка файлов в папке с указанием для каждого файла количества ячеек, содержащих определенный текст.
 

Здравствуйте, уважаемые форумчане. Нужна помощь в макросе.

Придумал я себе такую задачу: в папке есть разные прайсы, они удаляются и добавляются. В каждом файле в определенной строке стоят названия заказов с указанием, оплачены или нет. Надо получить список файлов в папке с указанием для каждого файла количества ячеек, содержащих определенный текст.

Нужно получить такой файл Прайсы-заказы.xlsm

в колонке А = список файлов в папке поиска, в колонке В количество ячеек к конкретном файле в определенной строке на нужном листе, которые содержат текст опл

Так как в каждом прайсе номер строки и имена листов с названиями заказов разные, пришлось сделать справочник, в котором указаны эти данные для каждого прайса

Я смог написать макрос, который выводит список файлов в папке.

НО если файл с макросом находиться в той же папке, то выводиться и его название. Поэтому файл с макросом лежит в другой папке, а в макросе жестко прописано название папки, что неудобно, поэтому желательно брать путь к папке из файла

Код
Sub ListFilesInFolder()
  Dim folderPath As String, fileName As String
  Dim fileNum As Integer
  Dim rowNum As Long

  ' Путь к папке
  folderPath = "C:\Прайсы"

  ' Очищаем предыдущий список (если есть)
  Columns("A").ClearContents

  ' Задаем начальную строку для вывода списка
  rowNum = 1

  ' Получаем первый файл в папке
  fileName = Dir(folderPath & "\*.*")

  ' Пока есть файлы в папке
  Do While fileName <> ""
    ' Записываем имя файла в ячейку
    Cells(rowNum, 1).Value = fileName

    ' Увеличиваем номер строки для следующего файла
    rowNum = rowNum + 1

    ' Получаем следующий файл
    fileName = Dir()
  Loop

  ' Автоматически подстраиваем ширину столбца
  Columns(1).AutoFit

  ' Выводим сообщение об успешном завершении
  MsgBox "Список файлов сформирован."
End Sub


Однако дальше не получается.

Можете помочь с макросом, который делал бы следующее:

  • вывести список всех файлов в папке, указанной в файле-примере в E1

  • для каждого прайса ищет в ячейках строки (ее номер в столбце I), находящейся на листе  (название в столбце J) все ячейки, содержащие текст из ячейки E2. Надо учитывать, что в ячейках строки могут разные типы данных, а также просто пустые ячейки

  • выводит общее количество таких ячеек (фактически количество оплаченных заказов в конкретном прайсе) в столбце B, напротив соответствующего прайса.

Заранее всем большое спасибо!
 
Структура прайсов одинаковая? Для примера хотя-бы один Прайс приложите
Ну а пока
Скрытый текст

Макрос ищет по всем файлам в указанной папке, по всем листам в этих файлах и на всем листе буквосочетание '*опл*' и выводит в таблицу Имя файла - Имя листа - Количество опл'ов
Изменено: Sanja - 11.07.2025 09:57:57
Согласие есть продукт при полном непротивлении сторон
 
Цитата
написал:
Структура прайсов одинаковая? Для примера хотя-бы один Прайс приложите
Добрый день, как раз в том то и дело, что структура всех прайсов разная. Мы их оставляем в том виде, как получаем от издательств, так как такое требование поставщиков, чтобы отправлять заказы в их прайсах. Поэтому надо искать на конкретных листах в указанных строках. Сами прайсы большие, с количеством строк от 500 до 300000.
Вот несколько сокращенных версий.
 
Цитата
написал:
Макрос ищет по всем файлам в указанной папке, по всем листам в этих файлах и на всем листе буквосочетание '*опл*' и выводит в таблицу Имя файла - Имя листа - Количество опл'ов
Макрос работает, спасибо. Но так как ищет на всех листах по всем строкам, то количество ОПЛ неправильное, оно часто встречается в названиях книг
 
Макрос не проверяет название книг на 'опл'
Конкретное указание имен листов для каждого файла, а так же конкретных столбцов и строк сводит на нет всю автоматизацию.
С таким же успехом можно все это прописать в формуле СЧЕТЕСЛИ()
См.макрос в файле. Очень на 'тоненького'
Обратите внимание на название листа в файле 'Ad Marginem.xls'.
Первоначально в Вашем файле имя листа было 'Лист1', а по факту 'Лмст 1'
Это все нужно будет всегда перепроверять или возможны не верные результаты
Проще действительно формулой
Изменено: Sanja - 11.07.2025 11:23:15
Согласие есть продукт при полном непротивлении сторон
 
Цитата
написал:
Макрос не проверяет название книг на 'опл'
Я имел ввиду названия товаров. Макрос же ищет их на всех листах. Как раз хотелось бы автоматизировать процесс.
Вот, что выдает Ваш макрос + я добавил в папку 2 полных прайса
Ad Marginem.xlsЛмст 15
Азбука.xlsЛист 110
Азбука.xlsСправочник1
Клуб_36_6.xlsnew7
РИПОЛ.xlsЛист14
СЗКО.xlswork1639
СЗКО.xlsСправочник2
а вот, что должно быть, если макрос ищет сочетание ОПЛ только на указанных листах в конкретных строках.

Ad Marginem.xlsЛмст 15
Азбука.xlsЛист 110
Клуб_36_6.xlsnew7
РИПОЛ.xlsЛист10
СЗКО.xlswork22

Я попробовал через СЧЕТЕСЛИ, прописал путь до файла, но если файл открыт, то все в порядке, если закрыт, то формула выдает ошибку #ЗНАЧ!
Открывать десятки файлов затруднительно, а макрос выдает информацию, не открывая файл.
Через макрос никак не реализовать такую задачу?
Может, поможете написать формулу, которая выдавала бы нужную информацию, не отрывая файлы? Тогда макрос будет выводить только список файлов, а формула будет брать путь, название листа и строку из справочника и выдавать количество ячеек с нужной информацией?
 
См.файл выше
Согласие есть продукт при полном непротивлении сторон
 
Цитата
написал:
См.файл выше
Спасибо большое, все работает, как надо. Очень помогли!
Страницы: 1
Читают тему
Наверх