2016-06-02 3 views
-1

У меня есть папка, в которой обновленные версии файла сохраняются каждый час. формат всегда один и тот же «yyyymmdd_hhmmss.xlsx». То, что я хотел бы сделать, это иметь макрос, который выглядит в папке, и возвращает количество файлов, которые похожи на «yyyymmdd_ *»vba имя файла countif похоже на строку

Я знаю, что я мог бы прокрутить папку и сделать count = count + 1, но я бы как бы избежать этого, если это возможно, поскольку в этой папке хранятся тысячи файлов.

Любая помощь будет оценена по достоинству. Благодаря!

+0

Я не совсем уверен, как это можно сделать без цикла. Полагаю, это возможно. Что вы сделали до сих пор? – Brian

+1

Читать это сообщение: http://stackoverflow.com/questions/10380312/loop-through-files-in-a-folder-using-vba. Я думаю, это то, что вы хотите. – Brian

+0

@Brian Я надеялся на форму типа countif, но я попытаюсь использовать цикл, используя Dir in, как предполагает эта ссылка. Это так медленно, так как в этой папке имеется много лет данных с 20 файлами в день. – Meghan

ответ

0

Попробуйте создать файл .bat в нужную папку. Поместите следующее в файл (изменить соответственно)

@echo off 
set cnt=0 
for %%A in (*.xlsx) do set /a cnt+=1 
echo File count = %cnt% 
pause 

Я попытался выше код с почти 10000 файлов в папке и насчитывает менее чем за 1 секунду. Надеюсь, поможет! :-)

0

Если вы хотите посчитать на определенную дату эта функция VBA должна работать:

Public Function CountFiles(datestr As String, pathstr As String) As Long 
    ' datestr has format yyyymmdd (no trailing underscore) 
    ' pathstr has format C:\folder1\folder2\...\folderN (no trailing backslash) 
    Dim count As Long 

    count = 0 
    If Dir(pathstr + "\" + datestr + "_??????.xlsx", vbNormal) Like "########_######.xlsx" Then 
     count = count + 1 
     While Dir() Like "########_######.xlsx" 
      count = count + 1 
     Wend 
    End If 
    CountFiles = count 
End Function 

Пример вызова:

=CountFiles("20160101", "C:\temp") 

Чтобы рассчитывать ВСЕ файлы (без даты фильтрация), используйте ???????? для датстера.

Обратите внимание, что эта функция выполняет некоторые проверки правильной отпечатанной даты/метки времени; он не будет считать файл с именем «20160101_report.xlsx».

Если вы всегда считаете один и тот же каталог, вы можете жестко указать путь strstr.

Надеюсь, это поможет.

Смежные вопросы