엑셀 VBA 활용 – 폴더의 파일 이름을 한꺼번에 변경하는 방법(하위 폴더 포함)


특정 폴더에 유사한 파일명의 파일이 모여 있는 경우 즉, 2024-01.xlsx, 2024-02.xlsx, 2024-03.xlsx와 같이 파일 이름이 년월로 구분되어 관리되는 경우가 있을 수 있습니다.

이처럼 년월과 같은 형식으로 파일 이름을 관리하는 경우 연도가 변경되어 일괄로 모두 이름을 바꾸어 주어야 한다면 어떻게 처리하는 것이 편리할까요?

파일 하나하나 직접 변경하기에는 다소 번거로운 작업이 될 수 있습니다. 한번에 모두 이름을 변경하는 방법이 있으면 가장 좋지 않을까요?

엑셀 VBA를 활용하면 간단하게 지정된 특정 폴더 및 하위 폴더에 있는 모든 파일에 대해서 파일 이름을 한꺼번에 변경할 수 있습니다.

이번 글에서는 엑셀 VBA 활용 – 폴더의 파일 이름을 한꺼번에 변경하는 방법(하위 폴더 포함)에 대해 알아보겠습니다.

폴더의 모든 파일에 대해 파일명을 한꺼번에 바꾸는 방법 시나리오

▼ 내 PC의 D 드라이브의 Temp 폴더에 년월 구분으로 만들어진 파일이 존재합니다.
그리고 Temp 폴더에는 “하반기”라는 하위 폴더가 하나 있으면 하위 폴더에도 년월 구분으로 만들어진 파일이 여러 개 있습니다.

▶ 파일 이름에서 “2023“을 “2024“로 한꺼번에 모든 파일에 대해 일괄 변경하는 것이 이번 VBA 프로그램의 목적입니다.

엑셀 VBA 활용 - 폴더의 파일 이름을 한꺼번에 변경하는 방법(하위 폴더 포함) 1

▼ VBA 프로그램을 실행한 뒤의 D:\Temp 폴더와 D:\Temp\하반기 폴더의 파일 이름이 모두 변경 된 것을 확인해 볼 수 있습니다.

엑셀 VBA 활용 - 폴더의 파일 이름을 한꺼번에 변경하는 방법(하위 폴더 포함) 2

다음 단락에서 하위 폴더를 포함한 지정된 폴더에 있는 모든 파일에 대한 파일 이름을 모두 변경하는 VBA 프로그램에 대해 알아보겠습니다.

엑셀 VBA에서 폴더에 있는 모든 파일의 이름을 변경하는 방법

▶ 혹시 엑셀 VBA 매크로 사용에 대해 어려움이 있다면 엑셀에서 VBA(매크로)를 처음으로 시작할 때 참고하세요. 이 글을 먼저 참고해 보세요.

▼ 아래 VBA 프로그램이 폴더의 파일 이름을 모두 바꾸는 소스 코드입니다.

‘폴더 및 파일을 제어하기 위한 개체 선언
Dim fs As FileSystemObject
 
Sub FileName_Change()
    Dim fd As Scripting.Folder
    Dim sPath As String
    
    If fs Is Nothing Then
        Set fs = New FileSystemObject
    End If
    
    ‘기준폴더 위치
    sPath = Range(“A2”)
 
    ‘만약 기준 폴더가 없다면 VBA 종료
    If Not fs.FolderExists(sPath) Then
        MsgBox “Folder Doesn’t Exist”
        Exit Sub
    End If
 
    Set fd = fs.GetFolder(sPath)
    RunFileNameChange fd, Range(“B2”).Value, Range(“C2”)
    
End Sub
 
 
Sub RunFileNameChange(fd As Scripting.Folder, sOld As String, sNew As String)
    
    Dim f As File
    Dim sName As String
    Dim sFullName As String
    
    If fs Is Nothing Then
        Set fs = New FileSystemObject
    End If
    
    ‘fd 폴더에 있는 모든 파일에 대해 처리
    For Each f In fd.Files
        ‘파일 이름에 변경전의 문자열이 있는 경우 파일명 변경
        If f.Name Like “*” & sOld & “*” Then
            sName = f.Name
            sName = Replace(sName, sOld, sNew)
            sFullName = f.ParentFolder & “\” & sName
            Name f As sFullName
        End If
    Next
    
    ‘하위 폴더의 파일명을 변경하기 위해 재귀호출(반복실행)
    For Each fd In fd.SubFolders
        RunFileNameChange fd, sOld, sNew
    Next
    
End Sub
 
  • 폴더 및 파일을 액세스 하기 위해 FileSystemObject 개체를 선언해 주었습니다.
  • FileSystemObect 개체를 사용하기 위해서는 Microsoft Scriptiing Runtime 참조(References)가 필요합니다.
    참조 방법은 다음 단락을 참고하세요.
  • 작업할 폴더는 엑셀 시트의 A2 셀 값으로 가져옵니다.
  • 파일 이름에서 변경 대상 이름의 문자열은 B2 셀 값으로(sOld), 변경 할 이름의 문자열은 C2 셀 값으로(sNew) 가져옵니다.
    파일명에서 문자열이 B2(“2003”)에서 C2(“2004”)로 바뀌게 됩니다.
  • 하위 폴더의 파일도 동일하게 작업하기 위해 RunFileNameChange 프로시저를 재귀호출(자신이 또 자신을 호출) 해 줍니다.

1. 아래 엑셀 시트의 A2, B2, C2 셀 값이 VBA에서 사용되는 값들입니다. 사용자 업무에 맞도록 이 부분을 수정해서 VBA를 실행하면 됩니다.

엑셀 VBA 활용 - 폴더의 파일 이름을 한꺼번에 변경하는 방법(하위 폴더 포함) 3

2. VBA 프로그램 소스 코드를 모두 작성하고, 실행하면 파일 이름이 모두 바뀌게 됩니다.

엑셀 VBA 활용 - 폴더의 파일 이름을 한꺼번에 변경하는 방법(하위 폴더 포함) 4

3. 실행할 매크로 이름을 선택하고 실행 버튼을 클릭하면 바로 실행이 됩니다.

엑셀 VBA 활용 - 폴더의 파일 이름을 한꺼번에 변경하는 방법(하위 폴더 포함) 5

Microsoft Scriptiing Runtime 참조(References)하는 방법

▶ 만약 앞에서 만든 VBA 매크로 실행했을 때 아래와 같은 오류가 발생한다면 FileSystemObject 개체를 사용하기 위한 라이브러리가 참조되지 않았기 때문입니다.

  • 컴파일 오류입니다. 사용자 정의 형식이 정의되지 않았습니다.
Microsoft Scriptiing Runtime 참조(References)하는 방법 1

1. 참조를 추가하기 위해 VBA 메뉴에서 [도구]를 선택하고, 확장된 메뉴에서 [참조]를 클릭합니다.

Microsoft Scriptiing Runtime 참조(References)하는 방법 2

2. 참조에 추가할 라이브러리는 Microsoft Scripting Runtime 입니다.

  • 알파벳 순으로 되어 있으니 사용 가능한 참조 목록에서 가운데 정도 내려가면 찾을 수 있습니다.

3. Microsoft Scripting Runtime 앞의 체크 표시에 체크하고 확인을 클릭하면 참조가 추가됩니다.

Microsoft Scriptiing Runtime 참조(References)하는 방법 3

마무리

일괄적으로 한번에 파일 이름을 변경해야 하는 경우 여기에서 소개한 VBA 프로그램을 활용하면 쉽게 파일 이름을 변경할 수 있습니다.

파일 이름에서 포함된 문자열이 모두 동일하게 지정된 것이 아닐 경우 B2(변경전) 셀 값을 적절히 변경해 가면 반복해서 VBA를 실행하면 그래도 직접 파일 이름을 변경하는 것 보다 빠르게 파일 이름을 바꿀 수 있습니다.

추가로 파일 이름에서 특정 문자열을 제거하고 싶은 경우에도 여기에 있는 VBA 프로그램을 사용할 수 있습니다.
변경전(B2) 이름의 문자열만 입력하고, 변경후(C2) 이름의 문자열을 아무것도 입력하지 않으면 파일 이름의 문자열에서 B2에 해당하는 문자열은 자동으로 제거되어 없어지게 됩니다.





이 글이 도움이 되었기를 바랍니다. ^-^


답글 남기기