배움터  
  HOME > 배움터 > Daily Tip
Daily Tip

제품:   Excel 버전:   공통
검색어:   dir
제목:   DIR과의 추억
     
 

New Page 2
  STEP> 따라하기


오늘의 데일리 팁에서는 Dir()함수를 이용한 사용자 정의 함수 3종 세트를 소개합니다.

물론 DIR명령은 도스시절 가장 많이 사용하던 내부명령어였습니다. PC를 갖고 놀다 심심하면 툭툭 던져보는 명령어였습니다. 그런데 이 낡았지만 훌륭한 명령어를 아직도 VB/VBA에서는 Dir()함수로서 잘 사용하고 있습니다.

물론 특정 폴더의 내용을 탐색하기 위해 사용합니다대표적으로 파일의 존재여부를 확인하기 위해 다음과 같이 사용합니다.

'//----------------------------------------
'// Name Function FileExists(...)
'// Description 파일이 존재하는지 확인
'// Arguments strFileName As String-파일명
'// Returns True-존재,False-존재않음
'//----------------------------------------
Private Function FileExists(ByVal strFileName As String) As Boolean
   If Len(Dir(strFileName)) <> 0 Then
      FileExists = True
   Else
      FileExists = False
   End If
End Function

위의 코드에서 Dir()함수에 존재유무를 확인하기 위한 파일의 이름을 매개변수(strFileName)를 던져 줍니다. 그래서 파일이 존재한다면 해당파일의 이름을 돌려주지만 아니라면 빈 문자열("")을 돌려주게 됩니다. 그래서 이것을 문자열의 길이를 알려주는 Len()함수로 확인하여 존재유무를 확인하는 것입니다.

Dir()함수는 파일 뿐만 아니라 디렉토리 즉 폴더의 존재유무를 확인하는 경우에도 사용합니다. 대신 매개변수로서 검색하려는 폴더명( *.* 포함) 뿐만 아니라 vbDirectory라는 vb상수를 추가해줍니다. 다음은 폴더 존재유무를 검색하는 사용자 정의 함수입니다.

'//----------------------------------------
'// Name Function DirExists(...)
'// Description 폴더가 존재하는지 확인
'// Arguments strDirName As String-폴더명
'// Returns True-존재,False-존재않음
'//----------------------------------------
Function DirExists(ByVal strDirName As String) As Integer
   Dim strDummy As String
   On Error Resume Next
   If Right$(strDirName, 1) <> "\" Then
      strDirName = strDirName & "\"
   End If
   strDummy = Dir$(strDirName & "*.*", vbDirectory)
   DirExists = Not (strDummy = vbNullString)
   Err = 0
End Function

그리고 마지막으로 폴더내 파일의 목록을 검색하는 기능을 다음과 같이 만들어서 사용할 수도 있습니다. 아래의 사용자 정의 함수 내용을 보시면 폴더의 내용을 검색하는 경우 Dir()함수를 2번 이상 사용하게 됩니다. Do~Loop를 돌기 전에 한 번 사용하고 Do~Loop안에서 또 사용을 한다는 점을 유의하시길 바랍니다.
 
‘//----------------------------------------
'// Name Function GetFileList(...)
'// Description 지정한 폴더의 파일목록을 돌려줌
'// Arguments
'// ...strDirPath As String - 검색할 폴더명
'// ...Optional strFileSpec As String = "*.*" - 검색할 파일 조건, 기본값(모든파일)
'// ...Optional strDelim As String = "," - 돌려줄 파일목록을 구분하는 기호, 기본값(,)
'// Returns 파일목록 문자열
'//----------------------------------------
Function GetFileList(strDirPath As String, _
                 Optional strFileSpec As String = "*.*", _
                 Optional strDelim As String = ",") As String

   Dim strFileList As String
   Dim strFileNames As String
   Dim strTemp As String

   strDirPath = IIf(Right(strDirPath, 1) <> Application.PathSeparator, strDirPath & Application.PathSeparator, strDirPath)
   strFileNames = strDirPath & strFileSpec
   strTemp = Dir(strFileNames)

   Do Until Len(strTemp) = 0
      strFileList = strFileList & strTemp & strDelim
      strTemp = Dir()
   Loop
   GetFileList = IIf(Len(strFileList) > 1, Left(strFileList, Len(strFileList) - 1), "")
End Function