특정 폴더에 유사한 파일명의 파일이 모여 있는 경우 즉, 2024-01.xlsx, 2024-02.xlsx, 2024-03.xlsx와 같이 파일 이름이 년월로 구분되어 관리되는 경우가 있을 수 있습니다.
이처럼 년월과 같은 형식으로 파일 이름을 관리하는 경우 연도가 변경되어 일괄로 모두 이름을 바꾸어 주어야 한다면 어떻게 처리하는 것이 편리할까요?
파일 하나하나 직접 변경하기에는 다소 번거로운 작업이 될 수 있습니다. 한번에 모두 이름을 변경하는 방법이 있으면 가장 좋지 않을까요?
엑셀 VBA를 활용하면 간단하게 지정된 특정 폴더 및 하위 폴더에 있는 모든 파일에 대해서 파일 이름을 한꺼번에 변경할 수 있습니다.
이번 글에서는 엑셀 VBA 활용 – 폴더의 파일 이름을 한꺼번에 변경하는 방법(하위 폴더 포함)에 대해 알아보겠습니다.
폴더의 모든 파일에 대해 파일명을 한꺼번에 바꾸는 방법 시나리오
▼ 내 PC의 D 드라이브의 Temp 폴더에 년월 구분으로 만들어진 파일이 존재합니다.
그리고 Temp 폴더에는 “하반기”라는 하위 폴더가 하나 있으면 하위 폴더에도 년월 구분으로 만들어진 파일이 여러 개 있습니다.
▶ 파일 이름에서 “2023“을 “2024“로 한꺼번에 모든 파일에 대해 일괄 변경하는 것이 이번 VBA 프로그램의 목적입니다.
▼ VBA 프로그램을 실행한 뒤의 D:\Temp 폴더와 D:\Temp\하반기 폴더의 파일 이름이 모두 변경 된 것을 확인해 볼 수 있습니다.
다음 단락에서 하위 폴더를 포함한 지정된 폴더에 있는 모든 파일에 대한 파일 이름을 모두 변경하는 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를 실행하면 됩니다.
2. VBA 프로그램 소스 코드를 모두 작성하고, 실행하면 파일 이름이 모두 바뀌게 됩니다.
3. 실행할 매크로 이름을 선택하고 실행 버튼을 클릭하면 바로 실행이 됩니다.
Microsoft Scriptiing Runtime 참조(References)하는 방법
▶ 만약 앞에서 만든 VBA 매크로 실행했을 때 아래와 같은 오류가 발생한다면 FileSystemObject 개체를 사용하기 위한 라이브러리가 참조되지 않았기 때문입니다.
- 컴파일 오류입니다. 사용자 정의 형식이 정의되지 않았습니다.
1. 참조를 추가하기 위해 VBA 메뉴에서 [도구]를 선택하고, 확장된 메뉴에서 [참조]를 클릭합니다.
2. 참조에 추가할 라이브러리는 Microsoft Scripting Runtime 입니다.
- 알파벳 순으로 되어 있으니 사용 가능한 참조 목록에서 가운데 정도 내려가면 찾을 수 있습니다.
3. Microsoft Scripting Runtime 앞의 체크 표시에 체크하고 확인을 클릭하면 참조가 추가됩니다.
마무리
일괄적으로 한번에 파일 이름을 변경해야 하는 경우 여기에서 소개한 VBA 프로그램을 활용하면 쉽게 파일 이름을 변경할 수 있습니다.
파일 이름에서 포함된 문자열이 모두 동일하게 지정된 것이 아닐 경우 B2(변경전) 셀 값을 적절히 변경해 가면 반복해서 VBA를 실행하면 그래도 직접 파일 이름을 변경하는 것 보다 빠르게 파일 이름을 바꿀 수 있습니다.
추가로 파일 이름에서 특정 문자열을 제거하고 싶은 경우에도 여기에 있는 VBA 프로그램을 사용할 수 있습니다.
변경전(B2) 이름의 문자열만 입력하고, 변경후(C2) 이름의 문자열을 아무것도 입력하지 않으면 파일 이름의 문자열에서 B2에 해당하는 문자열은 자동으로 제거되어 없어지게 됩니다.
※ 함께 읽으면 도움이 될 만한 다른 포스팅 글입니다.
이 글이 도움이 되었기를 바랍니다. ^-^