- 최초 작성일: 2001-07-10
- 최종 수정일: 2026-09-30
- 조회수: 9 회
- 작성자: 권현욱 (엑셀러)
- 강의 제목: 억세스파일 불러오기
들어가기 전에
오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.
이번 시간에는 게시판에 올라온 질문을 살펴봅니다.
안녕하세요
저번에 AutoCAD VBA를 질문했던 사람입니다.
이번에도 궁금한 게 있어 이렇게 글을 씁니다.
다름이 아니오라 이번에는 Access 파일을 엑셀에서 열려고 하는데
답변글을 모두 찾아 보았습니다만, 이런 답변글은 있더군요.
"영역을 선택해서 붙여넣으라"고요, 아니면 "VBA로 작성하라"고
혹시 작성된 프로그램 소스는 없는지요?
엑세스가 없는 사람은 붙여넣기를 할 수가 없으니 프로그램을 만들어야
할 것 같은데...
그럼 하시는 일마다 대성 있으시길 바랍니다.
꾸벅
오랜만에 ACCESS에 대한 질문이 들어왔군요. 억세스라는 프로그램은 오피스 Professional 버전 이상에 들어있는 데이터베이스 프로그램인데 대개 '이건 또 뭐야?'하며 클릭했다가 워드나 엑셀과는 달리 희안한 것이 뜨니까 누가 볼새라 슬그머니 닫고마는 프로그램입니다. 하지만 엑셀과 VBA도 훌륭한 프로그램입니다만 억세스도 쓰면 쓸수록 참 잘만든 프로그램이다라는 생각이 드는 프로그램입니다. 억세스에 대해서는 여력이 되면 본격적으로 다루도록 하겠습니다.
억세스파일 불러오기
핵심 요약: Access 테이블 불러오기
DAO로 MDB 파일을 열어 Recordset을 얻은 뒤 필드명을 적고 CopyFromRecordset으로 레코드를 붙여 넣으면 Access 데이터를 엑셀로 불러올 수 있습니다.
- 1단계: Microsoft DAO Object Library를 참조하고 OpenDatabase로 MDB 파일을 엽니다.
- 2단계: OpenRecordset으로 테이블을 열고 필드명을 새 시트의 첫 행에 적습니다.
- 3단계: CopyFromRecordset으로 레코드를 붙여 넣고 Recordset과 Database를 닫습니다.
Step 1: 예제 준비
어짜피 억세스 DB(즉 MDB) 파일의 구조를 파악하시려면 ACCESS가 있어야 합니다만, 일단 만들어 보도록 하지요. 아래의 버튼을 누르세요. 이번 강좌는 두 개의 파일로 이루어져 있습니다. 파일의 압축을 풀 때, MyMDB.mdb 파일을 반드시 같은 폴더에 푸시기 바랍니다. 그리고 MDB 파일이 같은 폴더에 있는데도 오류가 발생하는 경우에는 VB Editor 상태에서 '도구-참조' 메뉴를 선택하신 다음 'Microsoft DAO X.XX Object Library' 항목에 체크를 해 주시기 바랍니다.
1초도 안 걸리지요? 오늘 강좌는 데이터베이스에 대한 기본 개념과 DAO에 대해 알고있어야 하므로 이제 VBA에 맛을 들이기 시작한 분은 그냥 그런 것이 있구나 하는 정도만 이해하고 넘어 가시기 바랍니다. 코드를 보면...
Step 2: TableImport 프로시저
Sub TableImport()
Dim dbsMyDB As DAO.Database
Dim rstMyRST As DAO.Recordset
'''초장부터 해괴한 것들(?)이 나왔지요? 사실은 해괴한 것들이 아니고 아주 기특한
'''것들 입니다. 데이터베이스에 접근하기 위해 DAO(Data Access Object)라고 하는
'''녀석들의 힘을 빌리기 위한 것입니다.
'''지정한 쿼리 테이블이나 피벗 테이블 캐시에 대한 데이터 원본으로 사용되는
'''Recordset 개체를 설정하거나 반환합니다
Dim i As Integer, intNum As Integer
On Error GoTo ET
Set dbsMyDB = OpenDatabase _
(ThisWorkbook.Path & Application.PathSeparator & "MyMDB.mdb")
Set rstMyRST = dbsMyDB.openrecordset("Customer")
'''사용하는 단어만 약간 다를뿐, 기본적인 문법이나 어순(?)은 엑셀에 있는 VBA나
'''거의 같습니다.
Worksheets.Add after:=Sheets(1)
For i = 0 To rstMyRST.Fields.Count - 1
ActiveSheet.Cells(1, i + 1) = rstMyRST.Fields(i).Name
Next i
'''워크시트를 한장 삽입한 다음 MDB 테이블의 필드명을 새로운 시트의 A1 셀부터
'''차례로 적어 나갑니다.
With ActiveSheet.Range("a2")
.CopyFromRecordset rstMyRST
.CurrentRegion.Columns.AutoFit
.AutoFormat Format:=xlRangeAutoFormatList1, Number:=True, Font:= _
True, Alignment:=True, Border:=True, Pattern:=True, Width:=True
'''CopyFromRecordset 메서드는 ADO(DAO의 아들뻘!)나 DAO Recordset 개체의
'''내용을 워크시트에 있는 지정된 범위의 왼쪽 위 모서리부터 붙여넣는 역할을
'''수행합니다.
'''그런다음 워크시트 전체의 열 너비를 맞추어 주고 자동서식을 적용합니다.
End With
intNum = rstMyRST.RecordCount
MsgBox "총 " & intNum & " 개의 레코드를 복사하였습니다", , "작업 완료//By Exceller"
'''몇 개의 레코드가 있는지 Recordset 개체의 수를 카운팅하여 메시지 박스에
'''나타내 줍니다.
rstMyRST.Close
dbsMyDB.Close
'''작업이 끝나면 Recordset 개체와 Database를 닫습니다.
Exit Sub
ET: MsgBox "MDB 파일이 없습니다. 확인하세요", , "파일 경로 확인//By Exceller"
End Sub
MDB 파일과 DAO는 당시의 Jet 엔진 방식입니다. 64비트 오피스에서는 Microsoft Office Access Database Engine(ACE)이 필요하며, 참조 항목도 "Microsoft Office XX.0 Access Database Engine Object Library"로 바뀌어 있을 수 있습니다.
마무리
몇 가지 생소한 단어가 나와서 그렇지 문법 구조 자체는 그다지 어려운 것이 없을 것입니다. VBA와 DAO만 알면 이렇게 간단하게 해결이 됩니다.
물론 이렇게 하지 않고 억세스의 데이터를 복사한 다음 엑셀로 와서 붙여넣기를 해도 됩니다. 시간이 남아 돌아서 감당하기 힘든 분이라면... ^^
다음 시간에 또...
정리 — Access 불러오기 핵심
| 구분 | 사용한 코드 | 역할 |
|---|---|---|
| DB 열기 | OpenDatabase(경로 & "MyMDB.mdb") | MDB 파일 열기 |
| 테이블 열기 | dbsMyDB.OpenRecordset("Customer") | Recordset 생성 |
| 필드명 입력 | rstMyRST.Fields(i).Name | 머리글 작성 |
| 데이터 붙여넣기 | .CopyFromRecordset rstMyRST | 레코드를 시트에 입력 |
| 정리 | rstMyRST.Close / dbsMyDB.Close | 개체 닫기 |
자주 묻는 질문 (FAQ)
Q1. Access가 설치되어 있지 않아도 MDB 파일을 불러올 수 있나요?
DAO를 이용하면 Access 없이도 MDB 파일의 테이블을 엑셀로 불러올 수 있습니다.
Q2. CopyFromRecordset 메서드는 무엇을 하나요?
ADO나 DAO Recordset 개체의 내용을 지정한 범위의 왼쪽 위 모서리부터 워크시트에 붙여 넣습니다.
Q3. MDB 파일이 같은 폴더에 있는데도 오류가 나면?
VB Editor의 도구-참조에서 Microsoft DAO Object Library 항목에 체크했는지 확인합니다.
마치며
DAO와 CopyFromRecordset을 활용하면 Access 테이블의 데이터를 간단한 코드로 엑셀에 불러올 수 있습니다.