오빠두엑셀 `2026 무료 챌린지` 오픈! 완주하고 수료증 받아가세요! 5년 연속 IT분야 베스트셀러! 「 진짜쓰는 실무엑셀 」로 2026년 공부 끝내기 엑셀이 막히셨나요? Q&A 게시판에서 바로 해결하세요.
메뉴
퀵VBA 강의

엑셀 VBA 파일선택창(FileDialog) 마스터 코드 사용법

오빠두엑셀 by 오빠두엑셀
  • 학습시간 18분
  • 난이도 전문가
  • 작성일 2019.04.13

엑셀 매크로 자동화를 위한 필수 모듈! - 파일선택창 모듈 만들기

이 강의에서는 엑셀 VBA로 사용자에게 파일을 직접 선택하게 하는 파일선택창(FileDialog) 모듈의 동작 원리와 실전 활용법을 다룹니다. 변수 설정부터 다중 파일 선택, 파일이 선택되지 않았을 때의 오류 처리까지 단계별로 살펴보고, 시작 경로·확장자·구분자 등을 자유롭게 조절할 수 있도록 함수 형태의 마스터 코드로 정리합니다.

엑셀 VBA 파일선택창(FileDialog) 마스터 코드 사용법
DOWNLOADS

관련 자료를 모았어요

더 깊이 살펴볼 수 있는 자료를 한곳에

실습 가이드

엑셀 VBA 자동화에 필수적인 파일선택창(FileDialog) 모듈의 동작 원리와 활용법을 알아봅니다. 파일선택창을 활용하면 사용자가 원하는 확장자의 파일만 직접 선택하도록 유도할 수 있어, 유연성 있는 매크로 프로그램을 제작할 수 있습니다. 이번 강의에서 소개하는 마스터코드의 인수를 변경하면 시작 경로, 선택 가능 확장자, 동시 선택 가능한 파일 개수 등을 자유롭게 조절할 수 있습니다.

폴더 경로를 반환받아야 한다면 FolderDialog 함수를 사용합니다.

함수구문
= Multiple_FileDialog ( Title, FilterName, FilterExt, InitialFolder, InitialView, MultiSelection, PathDelimiter, withPath, withExt )
패치노트
  • 2019.11.27 업데이트
    Multiple_FileDialog 마스터 코드에 파일 구분자를 지정할 수 있는 PathDelimiter 인수가 추가되었습니다.
  • 2020.02.16 업데이트
    파일 경로와 확장자 포함 여부를 선택할 수 있도록 withPath, withExt 인수가 추가되었습니다. 출력 형식을 상황에 맞게 조정할 수 있습니다.

1. 변수 설정하기

파일선택창 동작에 필요한 4개의 변수를 생성합니다.

  • FGD : 파일선택창(FileDialog) 객체를 담을 변수입니다.
  • Selected : 파일선택창에서 파일이 선택되었는지 여부를 정수로 받아옵니다.
  • i : 선택된 파일들의 순번을 나타내는 카운터입니다.
  • ReturnStr : 선택된 파일들의 경로를 누적해 반환할 문자열입니다.
Sub Multiple_FileDialog()
 
Dim FDG As FileDialog
Dim Selected As Integer: Dim i As Integer
Dim ReturnStr As String
 
Set FDG = Application.FileDialog(msoFileDialogFilePicker)
 
End Sub

2. 파일선택창 (File Dialogue) 환경설정

파일선택창을 아래와 같이 설정합니다.

  • Title : 파일선택창 좌측 상단에 표시되는 제목을 설정합니다.
  • Fileters.Add : 선택 가능한 파일 확장자를 제한합니다.
  • InitialView : 파일선택창의 보기 종류를 설정합니다.
  • InitialFileName : 파일선택창이 처음 열릴 때의 폴더 경로를 설정합니다.
  • AllowMultiSelect : 다중 선택 허용 여부를 결정합니다.
With FDG
    .Title = "파일을 선택하세요"
    .Filters.Add "엑셀파일", "*.xls; *.xlsx; *.xlsm"
    .InitialView = msoFileDialogViewList
    .InitialFileName = ThisWorkbook.Path
    .AllowMultiSelect = True
    Selected = .Show
End With

3. 선택된 파일의 파일경로 받아오기

파일선택창에서 선택한 한 개 또는 여러 개의 파일 경로를 변수에 받아옵니다.

파일선택창에서 파일이 선택되면 Selected 변수는 -1을 반환합니다. 따라서 Selected 변수가 -1일 때만 파일 경로를 가져오도록 조건을 분기합니다.

Q: 파일이름에 콤마(,)가 들어갈 경우엔 어떻게 하나요?

파일 이름에 콤마(,)가 포함될 경우, 구분 기호를 세로바(|)로 대체하여 코드를 작성합니다. 윈도우 운영체제의 파일명에는 세로바(|) 사용이 금지되어 있어, 세로바를 구분자로 사용하면 모든 상황에 안전하게 대처할 수 있습니다.

If Selected = -1 Then  '파일이 선택되었을 경우 -1을 반환
    For i = 1 To FDG.SelectedItems.Count - 1
        ReturnStr = ReturnStr & FDG.SelectedItems(i) & ", "
        '// ReturnStr = ReturnStr & FDG.SelectedItems(i) & "| "
        '// 파일명에 콤마(,)가 들어갈 경우 구분기호를 세로바(|)로 대체합니다.
    Next i
    ReturnStr = ReturnStr & FDG.SelectedItems(.SelectedItems.Count)
End If

4. 에러핸들링 (오류처리)

파일선택창에서 어떤 파일도 선택하지 않고 종료할 경우, VBA는 디버그 오류를 반환합니다.

따라서 파일이 선택되지 않은 상황을 대비해, 사용자에게 다시 선택하도록 유도하거나 알림창을 띄우고 종료하는 방식으로 오류를 처리합니다.

4-A. 사용자가 다시 파일을 선택하도록 유도하는 오류처리방법
SelectAgain:
'.... 파일선택 본문
 
If Selected = 0 Then
    MsgBox "선택된 파일이 없습니다. 파일을 다시 선택해주세요."
    Goto SelectAgain:
end if
4-B. 파일이 선택되지 않았다는 알림창을 띄우는 오류처리 방법
If Selected = 0 Then
    MsgBox "아무런 파일이 선택되지 않았습니다. 프로세스를 종료합니다."
    End
end if

5. 엑셀 VBA 파일선택창 마스터 코드

파일선택창을 하나의 Function(함수) 형태로 모듈화하면 다양한 VBA 매크로에서 효율적으로 재사용할 수 있습니다.

아래 마스터 코드 전문을 활용해 파일선택창 기능을 손쉽게 매크로에 연결해보세요.

파일선택창 마스터 코드에 사용된 인수 설명
인수 설명
Title
[String, 선택인수]
파일선택창 제목입니다. 기본값은 "파일을 선택하세요" 입니다.
FilterName
[String, 선택인수]
선택 가능한 확장자 그룹의 이름입니다. 기본값은 "엑셀파일" 입니다.
FilterExt
[String, 선택인수]
선택 가능한 확장자 목록입니다. 기본값은 "*.xls; *.xlsx; *.xlsm" 입니다.
InitialFolder
[String, 선택인수]
파일선택창이 처음 열릴 폴더 경로입니다. 기본값은 "내문서" 폴더입니다.
InitialView
[MsoFileDialogView, 선택인수]
파일선택창의 보기 형식입니다. 기본값은 일반 보기 형식입니다.
MultiSelection
[Boolean, 선택인수]
파일 다중 선택 가능 여부입니다. 기본값은 TRUE(다중 선택 허용)입니다.
PathDelimiter
[String, 선택인수]
다중 선택된 파일 경로를 구분할 구분자입니다. 기본값은 "|" 입니다.
파일선택창 마스터 코드 전문
Public Function Multiple_FileDialog(Optional Title As String = "파일을 선택하세요", Optional FilterName As String = "엑셀파일", _
Optional FilterExt As String = "*.xls; *.xlsx; *.xlsm", Optional InitialFolder As String = "", _
Optional InitialView As MsoFileDialogView = msoFileDialogViewList, Optional MultiSelection As Boolean = True, Optional PathDelimiter As String = "|", _
Optional withPath As Boolean = True, Optional withExt As Boolean = True) As String
'###############################################################
'오빠두엑셀 VBA 사용자지정함수 (https://www.oppadu.com)
'▶ MultipleFileDialog 함수
'▶ 파일선택창으로 여러개의 파일 경로를 받아옵니다.
'▶ 인수 설명
'_____________Title         : 파일선택창의 제목입니다.
'_____________FilterName    : 특정 확장자를 가진 파일만 표시할 경우, 표시할 이름 입니다.
'_____________FilterExt     : 파일 확장자입니다.
'_____________InitialFolder : 파일 선택창 시작 폴더경로입니다. 기본값은 윈도우 기본경로입니다 .
'_____________Initialview   : 파일선택창의 보기 형식입니다. 기본값은 일반보기입니다.
'_____________MultiSelection : True일 경우 여러 파일을 선택할 수 있습니다. 기본값은 True 입니다.
'_____________PathDelimiter : 여러 파일이 선택될 경우, 각 파일을 구분할 구분자입니다. 기본값은 "|" 입니다.
'_____________withPath      : True일 경우 파일 경로를 같이 출력합니다. 기본값은 True 입니다.
'_____________withExt       : True일 경우 파일 확장자를 같이 출력합니다. 기본값은 True 입니다.
'▶ 사용 예제
'GetPath = Multiple_FileDialog(, "PDF 또는 그림파일", "*.pdf, *.png, *.jpg, *.bmp, *.jpeg")
'Paths = Split(GetPath, "|")
'For Each Path In Paths
'    MsgBox Path
'Next
'##############################################################
Dim FDG As FileDialog
Dim Selected As Integer: Dim i As Integer
Dim ReturnStr As String: Dim tempStr As Variant
 
Set FDG = Application.FileDialog(msoFileDialogFilePicker)
 
With FDG
    .Title = Title
    .Filters.Add FilterName, FilterExt
    .InitialView = InitialView
    .InitialFileName = InitialFolder
    .AllowMultiSelect = MultiSelection
    Selected = .Show
 
    If Selected = -1 Then
        For i = 1 To FDG.SelectedItems.Count - 1
            If withPath = False Then tempStr = Right(FDG.SelectedItems(i), Len(FDG.SelectedItems(i)) - InStrRev(FDG.SelectedItems(i), "\")) Else tempStr = FDG.SelectedItems(i)
            If withExt = False Then tempStr = Left(tempStr, InStrRev(tempStr, ".") - 1)
            ReturnStr = ReturnStr & tempStr & PathDelimiter
        Next i
        If withPath = False Then tempStr = Right(FDG.SelectedItems(.SelectedItems.Count), Len(FDG.SelectedItems(.SelectedItems.Count)) - InStrRev(FDG.SelectedItems(.SelectedItems.Count), "\")) Else tempStr = FDG.SelectedItems(.SelectedItems.Count)
        If withExt = False Then tempStr = Left(tempStr, InStrRev(tempStr, ".") - 1)
        ReturnStr = ReturnStr & tempStr
 
        Multiple_FileDialog = ReturnStr
    ElseIf Selected = 0 Then
        MsgBox "선택된 파일이 없으므로 프로그램을 종료합니다."
        End
    End If
 
End With
 
End Function

6. 파일선택창 마스터 코드 활용하여 여러 개의 엑셀파일 동시에 실행하기

파일선택창 마스터 코드를 활용하면 아래와 같이 사용자가 선택한 여러 개의 엑셀 파일을 동시에 실행할 수 있습니다.

Sub OpenFiles()
 
Dim SelectionStr As String
Dim Vars As Variant: Dim Var As Variant
 
SelectionStr = Multiple_FileDialog
 
Vars = Split(SelectionStr, "|")
 
For Each Var In Vars
    Application.Workbooks.Open Var
Next
 
MsgBox "선택된 엑셀 파일을 모두 실행하였습니다."
 
End Sub
댓글 33
5 (22개 평가)
이동훈
이동훈 2020.01.26 11:47
잘봣슨당
큰돌삐
큰돌삐 2020.02.15 23:26
선택한 파일의 폴더주소는 버리고 파일명만 추출하려면 어떻게 해야합니까?
오빠두엑셀
오빠두엑셀 작성자 2020.02.16 04:11
안녕하세요~^^
아래 부분을,
ReturnStr = ReturnStr & FDG.SelectedItems(i) & PathDelimiter
아래 코드로 바꿔주세요 ^^
ReturnStr = ReturnStr & Right(FDG.SelectedItems(i), Len(FDG.SelectedItems(i)) - InStrRev(FDG.SelectedItems(i), "\")) & PathDelimiter

그리고 아래 부분도,
ReturnStr = ReturnStr & FDG.SelectedItems(.SelectedItems.Count)
아래 수정된 코드로 변경해보시기 바랍니다 ^-^
ReturnStr = ReturnStr & Right(FDG.SelectedItems(.SelectedItems.Count), Len(FDG.SelectedItems(.SelectedItems.Count)) - InStrRev(FDG.SelectedItems(.SelectedItems.Count), "\"))

제 답변이 도움이 되셨길 바랍니다.
감사합니다.^^
오빠두엑셀
오빠두엑셀 작성자 2020.02.16 04:35
안녕하세요~^^ 명령문을 수정해드렸습니다.
명령문 인수중, withPath와 withExt를 각각 FALSE로 설정한 뒤 실행해보시겠어요?
감사합니다.^^
xuxin
xuxin 2020.03.31 16:27
Good
cvic11
cvic11 2020.10.03 04:11
궁금한 점이 있어 코멘트했다가 해결되었는데요, 코멘트 삭제 방법을 모르겠습니다;;;
김성근
김성근 2020.12.15 22:04
천재입니다!! 감사하빈다
곰몽
곰몽 2021.01.10 21:58
선생님 Filedialog 사용 중에 질문이 있는데요
사용 시 선택을 하여 Open 시에는 "열기" 버튼을 누르면 되는데
다른 목적으로 파일의 이름만 시트에 넣으려고 합니다.

Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.ButtonName = "선택"

으로 해주었는데 변화가 없어서 혹여 제가 잘못했나 싶어 문의 드립니다.
오빠두엑셀
오빠두엑셀 작성자 2021.01.26 16:39
VBA에서 제공되는 파일선택창의 [열기] 버튼 텍스트는 수정이 불가능합니다.
곰몽
곰몽 2021.01.27 08:22
답변 감사드립니다.
오늘도 동현해
오늘도 동현해 2021.01.20 10:04
안녕하세요. 저는 위 예시처럼 다음과 같이 VBA에 입력했는데, ".Title"에서 "Run-time error 91"이 발생합니다. ".xxx"라는 것을 사용하면 문제가 발생하고 있습니다 (.ㅅTitle을 지우면 다음 것에서 동일 문제 발생). "F_fld.Show"와 같이 할 때도 동일한 문제가 발생합니다. 어떻게 이 문제가 해결할 수 있는지 도움 부탁드립니다.
Sub Multiple_FileDialog()
Dim FDG As FileDialog
Dim Selected As Integer: Dim i As Integer
Dim ReturnStr As String
Set FDG = Application.FileDialog(msoFileDialogFilePicker)
 With FDG
  .Title = "파일을 선택하세요"
  .Filters.Add "엑셀파일", "*.xls; *.xlsx; *.xlsm"
  .InitialView = msoFileDialogViewList
  .InitialFileName = ThisWorkbook.Path
  .AllowMultiSelect = True
  Selected = .Show
End With
End Sub
오빠두엑셀
오빠두엑셀 작성자 2021.01.26 16:40
안녕하세요.
아마도 Mac OS를 사용중이신 듯 합니다.
Mac OS 에서는 FileDialog를 사용할 수 없습니다.
이밤에
이밤에 2021.01.21 15:02
어려워요.. 어려워요.
영원
영원 2021.03.17 15:08
감사합니다~~~!
활짝미소
활짝미소 2021.07.22 22:25
초보이지만, 잘 배워서 업무에 도움이 됬음 좋겠어요