2016-06-02 5 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을 사용하여 루프를 시도합니다. 하루에 20 개의 파일이있는이 폴더에는 수년 간의 데이터가 있기 때문에 지금은 너무 느립니다. – Meghan

답변

0

집계 할 폴더에 .bat 파일을 만들어보십시오. 파일에 다음을 넣어

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

내가 폴더 거의 10,000 파일을 위의 코드를 시도 (따라 변경)과는 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") 

에는 날짜 (ALL 파일을 계산하지 않으려면 필터링), datestr에 ????????을 사용하십시오.

이 함수는 올바른 형식의 날짜/시간 스탬프에 대한 테스트를 수행합니다. "20160101_report.xlsx"라는 파일은 계산되지 않습니다.

항상 같은 디렉토리를 계산하면 pathstr을 하드 코딩 할 수 있습니다.

희망이 도움이됩니다.