Этот макрос выводит информацию о папке — например, её размер, и количество файлов в ней:
Sub ПодсчётКоличестваФайловВПапке() ' задаём папку FolderPath = "C:Documents and SettingsAdminРабочий стол" ' получаем характеристики папки Set FSO = CreateObject("Scripting.FileSystemObject") КоличествоФайловВПапкеБезУчётаПодпапок = FSO.GetFolder(FolderPath).Files.Count КоличествоПодпапок = FSO.GetFolder(FolderPath).SubFolders.Count РазмерПапкиВБайтах = FSO.GetFolder(FolderPath).Size ' подсчитываем количество файлов с учётом файлов в подпапках КоличествоФайловВПапкеСУчётомПодпапок = FilesCount(FolderPath) Debug.Print "В папке найдено " & КоличествоФайловВПапкеБезУчётаПодпапок & " файлов и " & _ КоличествоПодпапок & " подпапок. Всего файлов: " & КоличествоФайловВПапкеСУчётомПодпапок Debug.Print "Папка занимает на диске " & РазмерПапкиВБайтах & " байтов (" & _ FileOrFolderSize(РазмерПапкиВБайтах) & ")" End Sub
Результат работы кода (в окне Immediate):
В папке найдено 186 файлов и 31 подпапок. Всего файлов: 4216
Папка занимает на диске 193158100 байтов (184 Мб)
Если же вам надо вывести список файлов на лист Excel — смотрите функцию FilenamesCollection:
http://excelvba.ru/code/FilenamesCollection
Код необходимых функций для подсчёта файлов:
Function FilesCount(ByVal FolderPath As String, Optional ByVal SearchDeep As Long = 999) As Long ' Получает в качестве параметра путь к папке FolderPath, ' и глубину поиска SearchDeep в подпапках (если SearchDeep=1, то подпапки не просматриваются). ' Возвращает количество найденных файлов ' (применяется рекурсивный вызов процедуры GetAllFileNamesUsingFSO) Set FSO = CreateObject("Scripting.FileSystemObject") ' создаём экземпляр FileSystemObject FilesCount = GetFilesCountUsingFSO(FolderPath, FSO, SearchDeep) ' подсчёт файлов Set FSO = Nothing End Function Function GetFilesCountUsingFSO(ByVal FolderPath As String, ByRef FSO, ByVal SearchDeep As Long) ' перебирает все файлы и подпапки в папке FolderPath, используя объект FSO ' перебор папок осуществляется в том случае, если SearchDeep > 1 ' добавляет пути найденных файлов в коллекцию FileNamesColl 'On Error Resume Next: Set curfold = FSO.GetFolder(FolderPath) If Not curfold Is Nothing Then ' если удалось получить доступ к папке GetFilesCountUsingFSO = curfold.Files.Count SearchDeep = SearchDeep - 1 ' уменьшаем глубину поиска в подпапках If SearchDeep Then ' если надо искать глубже For Each sfol In curfold.SubFolders ' перебираем все подпапки в папке FolderPath GetFilesCountUsingFSO = GetFilesCountUsingFSO + GetFilesCountUsingFSO(sfol.Path, FSO, SearchDeep) Next End If Set fil = Nothing: Set curfold = Nothing ' очищаем переменные End If End Function
Для вывода понятной (отформатированной) информации об объёме папки или файла используется функция FileOrFolderSize:
Function FileOrFolderSize(ByVal s) As String Size = Fix(Val(s)): ' If s = "" Then FileOrFolderSize = "<нет доступа>" Select Case Size Case Is < 1000: FileOrFolderSize = Size & " байт" Case Is < 10000: FileOrFolderSize = FormatNumber(Size / 1024, 1) & " Кб" Case Is < 1000000: FileOrFolderSize = FormatNumber(Size 1024, 0) & " Кб" Case Is < 10000000: FileOrFolderSize = FormatNumber(Size / 1024 / 1024, 1) & " Mб" Case Is < 1000000000: FileOrFolderSize = FormatNumber(Size / 1024 / 1024, 0) & " Мб" Case Else: FileOrFolderSize = FormatNumber(Size / 1024 / 1024 / 1024, 1) & " Гб" End Select End Function
Список файлов в папке
Иногда бывает необходимо заполучить на лист Excel список файлов в заданной папке и ее подпапках. В моей практике такое встречалось неоднократно, например:
- перечислить в приложении к договору на проведение тренинга список файлов из раздаточных материалов для особо щепетильных юристов в некоторых компаниях
- создать список файлов для ТЗ проекта
- сравнить содержимое папок (оригинал и бэкап, например)
Для реализации подобной задачи можно использовать несколько способов.
Способ 1. Скелет из шкафа — функция ФАЙЛЫ
Этот способ использует древнюю функцию ФАЙЛЫ (FILES), оставшуюся в Microsoft Excel с далеких девяностых. Вы не найдете эту функцию в общем списке функций, но для совместимости, она всё ещё остаётся внутри движка Excel, и мы вполне можем её использовать.
Механизм таков:
1. В любую ячейку листа (например, в А1) введём путь к папке, список файлов из которой мы хотим получить.
Обратите внимание, что путь должен оканчиваться шаблоном со звездочками:
- *.* — любые файлы
- *.xlsx — книги Excel (только с расширением xlsx)
- *.xl* — любые файлы Excel
- *отчет* — файлы, содержащие слово отчет в названии
и т.д.
2. Создадим именованный диапазон с помощью вкладки Формулы — далее кнопка Диспетчер имен — Создать (Formulas — Names Manger — Create). В открывшемся окне введем любое имя без пробелов (например Мои_файлы) и в поле диапазона выражение:
=ФАЙЛЫ(Лист1!$A$1)
После нажатия на ОК будет создан именованный диапазон с именем Мои_файлы, где хранится список всех файлов из указанной в А1 папки. Останется их оттуда только извлечь.
3. Чтобы извлечь имена отдельных файлов из созданной переменной, используем функцию ИНДЕКС (INDEX), которая в Excel вытаскивает данные из массива по их номеру:
Если лениво делать отдельный столбец с нумерацией, то можно воспользоваться костылем в виде функции СТРОКИ (ROWS), которая будет подсчитывать количество заполненных строк с начала списка автоматически:
=ИНДЕКС(Мои_файлы; ЧСТРОК($B$3:B3))
Ну, и скрыть ошибки #ССЫЛКА! в конце списка (если вы протягиваете формулу с запасом) можно стандартной функцией ЕСЛИОШИБКА (IFERROR):
=ЕСЛИОШИБКА(ИНДЕКС(Мои_файлы; ЧСТРОК($B$3:B3)); «»)
Важное примечание: формально функция ФАЙЛЫ относится к макро-функциям, поэтому необходимо будет сохранить ваш файл в формате с поддержкой макросов (xlsm или xlsb).
Способ 2. Готовый макрос для ленивых
Если вы знакомы с макросами (не в смысле их программирования, а в смысле копипастинга готовых кодов на VBA), то вам, возможно, отлично зайдёт небольшой макрос, добавляющий в текущую книгу новый пустой лист и выводящий на него список всех файлов с их параметрами из заданной пользователем папки.
Для добавления макроса в вашу книгу нажмите сочетание клавиш Alt+F11, или кнопку Visual Basic на вкладке Разработчик (Developer), в открывшемся окне редактора Visual Basic вставьте новый модуль через меню Insert — Module и скопируйте туда текст этого макроса:
Sub FileList() Dim V As String Dim BrowseFolder As String 'открываем диалоговое окно выбора папки With Application.FileDialog(msoFileDialogFolderPicker) .Title = "Выберите папку или диск" .Show On Error Resume Next Err.Clear V = .SelectedItems(1) If Err.Number <> 0 Then MsgBox "Вы ничего не выбрали!" Exit Sub End If End With BrowseFolder = CStr(V) 'добавляем лист и выводим на него шапку таблицы ActiveWorkbook.Sheets.Add With Range("A1:E1") .Font.Bold = True .Font.Size = 12 End With Range("A1").Value = "Имя файла" Range("B1").Value = "Путь" Range("C1").Value = "Размер" Range("D1").Value = "Дата создания" Range("E1").Value = "Дата изменения" 'вызываем процедуру вывода списка файлов 'измените True на False, если не нужно выводить файлы из вложенных папок ListFilesInFolder BrowseFolder, True End Sub Private Sub ListFilesInFolder(ByVal SourceFolderName As String, ByVal IncludeSubfolders As Boolean) Dim FSO As Object Dim SourceFolder As Object Dim SubFolder As Object Dim FileItem As Object Dim r As Long Set FSO = CreateObject("Scripting.FileSystemObject") Set SourceFolder = FSO.getfolder(SourceFolderName) r = Range("A65536").End(xlUp).Row + 1 'находим первую пустую строку 'выводим данные по файлу For Each FileItem In SourceFolder.Files Cells(r, 1).Formula = FileItem.Name Cells(r, 2).Formula = FileItem.Path Cells(r, 3).Formula = FileItem.Size Cells(r, 4).Formula = FileItem.DateCreated Cells(r, 5).Formula = FileItem.DateLastModified r = r + 1 X = SourceFolder.Path Next FileItem 'вызываем процедуру повторно для каждой вложенной папки If IncludeSubfolders Then For Each SubFolder In SourceFolder.SubFolders ListFilesInFolder SubFolder.Path, True Next SubFolder End If Columns("A:E").AutoFit Set FileItem = Nothing Set SourceFolder = Nothing Set FSO = Nothing End Sub
Для запуска макроса нажмите сочетание клавиш Alt+F8,или кнопку Макросы (Macros) на вкладке Разработчик (Developer), выберите наш макрос FileList и нажмите кнопку Выполнить (Run). В диалоговом окне выберите любую папку или диск и — вуаля!
Если захотите, чтобы вместо пути к файлу в столбце B выводилась живая гиперссылка, то замените 52-ю строку
Cells(r, 2).Formula = FileItem.Path
на
Cells(r, 2).Formula = «=HYPERLINK(«»» & FileItem.Path & «»»)»
Способ 3. Мощь и красота — надстройка Power Query
Power Query — это очень мощная и при этом бесплатная надстройка для Excel от Microsoft, упрощающая множество задач по загрузке и трансформации данных. В нашей ситуации она тоже может здорово помочь.
Если у вас Excel 2016 или новее, то Power Query уже встроена в Excel по умолчанию, поэтому просто на вкладке Данные выберите команду Создать запрос / Получить данные — Из файла — Из папки (Create Query / Get Data — From file — From folder). Если у вас Excel 2010-2013, то Power Query нужно будет скачать с сайта Microsoft и установить как отдельную надстройку и она появится у вас в Excel в виде отдельной вкладки Power Query. На ней будет аналогичная кнопка Из файла — Из папки (From file — From folder).
В открывшемся окне нужно будет указать папку, содержимое которой мы хотим получить. После нажатия на ОК Power Query обшарит указанную папку и все вложенные подпапки и выдаст на экран окно с предварительным просмотром результатов:
Если внешний вид списка вас устраивает, то можно смело жать внизу кнопку Загрузить (Load), чтобы залить эти данные на новый лист. Если же хочется дополнительно обработать список (удалить лишние столбцы, отобрать только нужные файлы и т.п.), то нужно выбрать команду Изменить / Преобразовать данные (Edit / Transform Data).
Поверх окна Excel откроется окно редактора Power Query, где мы увидим список всех наших файлов в виде таблицы:
Дальше возможны несколько вариантов:
- Если нужны только файлы определенного типа, то их можно легко отобрать с помощью фильтра по столбцу Extension:
- Аналогичным образом фильтрами по столбцам Date accessed, Date modified или Date created можно отобрать файлы за нужный период (например, созданные только за последний месяц и т.п.):
- Если нужно получить данные не из всех папок, то фильтруем по столбцу Folder Path, чтобы оставить только те строки, где путь содержит/не содержит нужные имена папок:
- Там же можно выполнить сортировку файлов по любому столбцу, если требуется.
После того, как необходимые файлы отобраны, можно смело удалить ненужные столбцы, щелкнув по заголовку столбца правой кнопкой мыши и выбрав команду Удалить (Remove column). Это, кстати, уже никак не повлияет на фильтрацию или сортировку нашего списка:
Если в будущем планируется подсчитывать количество файлов в каждой папке (например, для контроля поступивших заявок или подсчета статистики по заявкам), то имеет смысл дополнительно сделать ещё пару действий:
- Щелкните правой кнопкой мыши по столбцу Folder Path и выберите команду Дублировать столбец (Duplicate Column).
- Выделите скопированный столбец и на вкладке Преобразование (Transform) выберите Разделить столбец — По разделителю (Split Column — By delimiter)
Мы получим рядом с нашими данными еще несколько столбцов, где будут продублированы имена вложенных папок — это пригодится нам чуть позже для подсчета статистики с помощью сводной таблицы:
Получившиеся столбцы можно переименовать (Диск, Папка1, Папка2 и т.д.), просто щёлкнув дважды по заголовку каждого.
И, наконец, когда список готов, то его можно выгрузить на лист с помощью команды Главная — Закрыть и загрузить — Закрыть и загрузить в… (Home — Close & Load — Close & Load to…):
И, само-собой, теперь можно построить по нашей таблице сводную (вкладка Вставка — Сводная таблица), чтобы легко подсчитать количество файлов в каждой папке:
Дополнительным бонусом можно сделать еще один столбец с функцией ГИПЕРССЫЛКА (HYPERLINK), которая создаст красивые стрелочки-ссылки для моментального перехода к каждому файлу:
Мелочь, а приятно
И вдвойне приятно, что в будущем, при изменении содержимого исходной папки, достаточно будет просто щелкнуть мышью по нашей таблице и выбрать команду Обновить (Refresh) — и Power Query выполнит всю цепочку запрограммированных нами единожды действий уже автоматически, отобразив все изменения в составе папки.
Ссылки по теме
- Что такое макрос, куда вставлять код макроса на Visual Basic
- Создание резервных копий ценных файлов
- Что такое Power Query и что можно делать с её помощью
Как посчитать файлы в определенной папке / каталоге в Excel?
Если вам нужно получить количество файлов в определенной папке в Excel, какой метод вы подумаете? Как насчет подсчета количества файлов определенного типа в папке? А что, если в Excel считать файлы в определенной папке и ее подпапках? Следующие приемы помогут вам легко решить эту проблему.
- Подсчитать указанный тип файлов в определенной папке с VBA
- Подсчитайте все файлы в папке, содержащей текущую книгу
- Подсчитайте все файлы в определенной папке (включая подпапки) с помощью Kutools for Excel
Подсчитать указанный тип файлов в определенной папке с VBA
Следующий VBA может помочь вам легко подсчитать определенный тип файлов в определенной папке, например подсчитать все файлы .xlsx в папке. Пожалуйста, сделайте следующее:
1. нажмите другой + F11 одновременно клавиши, чтобы открыть окно Microsoft Visual Basic для приложений.
2. Нажмите Вставить > Модули, а затем вставьте приведенный ниже код VBA в открывающееся окно модуля.
VBA: подсчитать определенный файл в определенной папке
Sub CountFiles()
Dim xFolder As String
Dim xPath As String
Dim xCount As Long
Dim xFiDialog As FileDialog
Dim xFile As String
Set xFiDialog = Application.FileDialog(msoFileDialogFolderPicker)
If xFiDialog.Show = -1 Then
xFolder = xFiDialog.SelectedItems(1)
End If
If xFolder = "" Then Exit Sub
xPath = xFolder & "*.xlsx"
xFile = Dir(xPath)
Do While xFile <> ""
xCount = xCount + 1
xFile = Dir()
Loop
MsgBox xCount & " files found"
End Sub
Внимание: Приведенный выше код VBA будет считать . XLSX файлы в определенной папке. Для подсчета других типов файлов, пожалуйста, узнайте xPath = xFolder & » *. xlsx», и измените . XLSX в другое расширение файла в зависимости от ваших потребностей.
3. нажмите F5 ключ или щелкните Run кнопку, чтобы запустить этот код VBA.
4. В открывшемся диалоговом окне Обзор выберите определенную папку, в которой вы будете считать файлы определенного типа, и щелкните значок OK кнопку.
5. Теперь появится диалоговое окно, в котором будет показано, сколько файлов определенного типа существует в определенной папке. Просто закройте диалоговое окно.
Легко объединяйте несколько листов / книг / файлов CSV в один рабочий лист / книгу
Объединение десятков листов из разных книг в один лист может оказаться утомительным. Но с Kutools for ExcelАвтора Объединить (рабочие листы и рабочие тетради) утилиту, вы можете сделать это всего за несколько кликов!
Подсчитайте все файлы в папке, содержащей текущую книгу
Если вы открыли папку, обычно вы получите количество всех файлов в нижней части этой папки. Этот метод познакомит Kutools for ExcelАвтора Откройте папку содержащие утилита, чтобы открыть папку, содержащую текущую книгу, а затем получить количество файлов в этой папке.
1. Нажмите Кутулс Плюс > Workbook > Откройте папку содержащие. Смотрите скриншот:
2. Теперь открывается папка, содержащая текущую книгу.
Отмените выбор любого файла в открывающейся папке, и вы увидите количество всех файлов внизу этой папки, как показано ниже:
Внимание: Откройте папку содержащие утилита будет недействительной, если вы никогда раньше не сохраняли текущую книгу.
Kutools for Excel — Включает более 300 удобных инструментов для Excel. Полнофункциональная бесплатная пробная версия 30-день, кредитная карта не требуется! Get It Now
Подсчитайте все файлы в определенной папке (включая подпапки) с помощью Kutools for Excel
Иногда вам может понадобиться подсчитать несколько типов файлов в папке и ее подпапках. На самом деле Kutools for Excel предоставляет другой Список имен файлов утилита, чтобы решить эту проблему с легкостью.
1. Нажмите Кутулс Плюс > Импорт / Экспорт > Список имен файлов , чтобы открыть диалоговое окно Список имен файлов.
2. В открывшемся диалоговом окне «Список имен файлов» сделайте следующее:
(1) Щелкните значок Приложения кнопка выбрать определенную папку, в которой вы будете считать определенные типы файлов.
(2) Укажите типы файлов, которые вы будете считать в зависимости от ваших потребностей.
Например, вам нужно подсчитать все виды книг, например . XLSX файлы, XLSM файлов, а также . Xls файлы и т. д., проверьте Общий и выберите Все файлы Excel из раскрывающегося списка ниже.
Примечание: Если вам нужно подсчитать все / определенные типы файлов в определенной папке и ее подпапках, проверьте Включить файлы в подкаталоги опцию.
3. Нажмите Ok в диалоговом окне Список имен файлов.
4. Теперь все файлы определенных типов перечислены на новом листе. Просто выберите первый столбец без заголовка столбца, и вы получите количество файлов в строке состояния, как показано ниже:
Kutools for Excel — Включает более 300 удобных инструментов для Excel. Полнофункциональная бесплатная пробная версия 30-день, кредитная карта не требуется! Get It Now
Демо: подсчитайте все файлы в определенной папке (включая подпапки)
Лучшие инструменты для работы в офисе
Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%
- Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
- Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон…
- Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны…
- Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
- Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
- Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии…
- Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
- Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF…
- Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.
Вкладка Office: интерфейс с вкладками в Office и упрощение работы
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!
Комментарии (0)
Оценок пока нет. Оцените первым!
Далала 0 / 0 / 0 Регистрация: 28.02.2020 Сообщений: 9 |
||||
1 |
||||
Excel Подсчет файлов в папке и вывод значения в ячейку29.02.2020, 10:09. Показов 4114. Ответов 2 Метки вывод данных, макросы excel (Все метки)
Здравствуйте! Есть макрос, который в подсчитывает количество файлов, находящихся в заданной папке.
Заранее прошу прощения за глупый вопрос, в макросах полный нуль
0 |
2670 / 786 / 176 Регистрация: 14.01.2013 Сообщений: 3,676 |
|
29.02.2020, 13:19 |
2 |
Сообщение было отмечено Далала как решение РешениеCells(4, 6).Value = iCount
1 |
0 / 0 / 0 Регистрация: 28.02.2020 Сообщений: 9 |
|
01.03.2020, 12:12 [ТС] |
3 |
Спасибо большое!
0 |
подсчет количества файлов в папки |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |