имя файла vba countif похоже на строку

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

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

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


person Meghan    schedule 02.06.2016    source источник
comment
Я не совсем уверен, как это можно сделать без цикла. Я полагаю, это возможно. Что вы сделали до сих пор?   -  person Brian    schedule 02.06.2016
comment
Прочтите этот пост: stackoverflow.com/questions/10380312/. Я думаю, это то, что вы хотите.   -  person Brian    schedule 02.06.2016
comment
@Brian Я надеялся на формулу типа countif, но я попробую с циклом, используя Dir, как предлагает эта ссылка. Сейчас это так медленно, потому что в этой папке многолетние данные с 20 файлами в день.   -  person Meghan    schedule 02.06.2016
comment
А как насчет этого: stackoverflow.com/questions/11004045/   -  person Brian    schedule 02.06.2016
comment
Также полезно - stackoverflow.com/questions/5548231/   -  person Brian    schedule 02.06.2016
comment
Вы можете использовать командную строку: DIR your_dir\20160101_*.xlsx для подсчета по дате. Также вы можете передать результат через FINDSTR: DIR your_dir\20160101_*.xlsx | FINDSTR File, чтобы получить однострочный результат.   -  person xidgel    schedule 02.06.2016


Ответы (2)


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

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

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

person Brian    schedule 02.06.2016

Если вы хотите подсчитать к указанной дате, эта функция 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")

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

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

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

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

person xidgel    schedule 02.06.2016