각 DataBase별 환경설정 부분은 dicws.tistory.com/62 앞에서 확인하시고

 

이번에는 엑셀에서 해당 테이블을 가져오기 위해 추가설정부분에 대한 얘기를 하고자 합니다.

엑셀만 그렇지는 않고 보통 개발하다 보면 라이브러리가 필요로 할때가 많습니다. 그리고 많은 라이브러리들을 추가해주고 설정해야됩니다. 이런과정이 VBA에도 있습니다.

 

데이터 연결방법 두가지

    윈도우즈 각 드라이버를 설치하고,

       첫번째는 윈도우드ODBC에서 연결을 하고 연결된 ODB를 통하여 데이터 연결하는 방법

       두번째는 윈도우에 각 드라이버 직접접속 하여 데이터 연결하는 방법 

           두번째는 CreationObject를 통하여 각 DataBase 종류별로 Connection 스트링을 맞춰 직접 연결

           첫번째는 OLBC에서 미리 접속연결하고 동일한 Connection 스트링으로 연결하면 됩니다.

 

일단 라이브러리 추가 -> 데이터 베이스 연결을 해보겠습니다.

▶ 라이브러리 추가

   VBA에서 DataBase를 연결하기위해 또는 일반 파일을 엑세스 하기위해 라이브러리를 추가해야됩니다.

   먼저 DataBase를 연결하기 위한 라이브러리를 추가합니다.

    메뉴에서 도구->참조

라이브러리 추가 메뉴

 

 

Microsoft ActiveX Data Object Library를 선택 버전은 여러개 있는데 2.0이후부터인데 보통 2.7, 2.8 6.1 선택하시면 됩니다.

Microsoft ActiveX Data Object Library 추가

 

 

▶ DataBase 연결정보 확인

     연결전 드라이버를 확인

      검색->ODBC 입력후-> 64bit선택

내 PC에 저장되어 있는 드라이버

 

 

▶ DataBase 직접연결 방법

Option Explicit                        '명시적 선언
Public dbconn As ADODB.Connection      '추가한 라이브러리 선언

Public Sub DBTest()

    'DataBase 연결 사용하기 위한 변수 설정
    Dim strCon  As String            '연결String ※요게 DataBase마다 다름 
    Dim rs      As ADODB.Recordset   'Variant 형으로 선언해도 됨 
    Dim sql
    
    
    '1-1) Mysql기준으로 Connection String 작성
    strCon = "Driver={MySQL ODBC 8.0 Unicode Driver};SERVER=127.0.0.1;PORT=3306;UID=root;PWD=해당패스워드;DATABASE=mysql;"
    
    '1-2) 커넥션 객체 생성 (객체 연결방법 두가지) 
    'Set dbconn = CreateObject("ADODB.Connection")   '라이브러리를 추가하지 않고 직접생성방법
    Set dbconn = New ADODB.Connection                '라이브러리를 참조로 추가했기 때문에 사용가능
   
    dbconn.Open strCon      '1-3)연결
    
    '2-1) DataBase 접속한후 작업
    'Set rs = CreateObject("ADODB.RecordSet")        'RecordSet이라고 조회후 내용을 담아둘 객체 수기생성 
    Set rs = New ADODB.Recordset                     '참조된 라이브러리로 생성
    
    '2-2) 쿼리 작성
    sql = "select * from db "
    
    '2-3) 쿼리 수행(여기서는 조회쿼리로 RecordSet에 담아서 결과출력)
    rs.Open sql, dbconn                    'Connecton 객체로 sql 수행
   
    While rs.EOF = False
   
        Debug.Print rs.Fields(1)           '조회결과를 index로 출력
        'Debug.Print rs("컬럼명")          '컬럼명을 가지고 출력 
       
        rs.MoveNext                        '다음Record로 전환 
    Wend
    
    rs.close      'RecordSet 객체 닫기 : 자원반납
    dbconn.close  'Connection 객체 닫기: 자원반납  

End Sub

기본적인 연결을 정의해보았고 DataBase별 다른부분을 설명하겠습니다.

다른부분은 DataBase별 StrCon이라고 Connection String이 달라집니다. 

 

DataBase 종류Connection String

   1) Excel

strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=파일경로;Extended Properties=Excel 12.0;"

※ 엑셀도 일반 DataBase처럼 SQL로 조회 수정이 가능합니다.

 

  2) Oracle

strCon = "DRIVER={드라이버명};Uid=사용자ID;Pwd=사용자암호;DBQ=오라클TNS명;DBA=W;"

※ 드라이버명은 위에서 Oracle in instantclient_19_8 입니다.

 

  3) Mysql

strCon = "Driver={드라이버명};SERVER=서버IP;PORT=서버포트;UID=사용자ID;PWD=사용자암호;DATABASE=데이터베이스명;"

※ 드라이버명은 위에서 MySQL ODBC 8.0 Unicode Driver 입니다

 

4) IBM DB2

 

strCon = "Driver={드라이버명};Database=데이터베이스명;Hostname=서버IP;Port=서버포트;Protocol=TCPIP;Uid=사용자ID;Pwd=패스워드;CurrentSchema=스키마명;"

※ 드라이버명은 위에서 IBM DB2 ODBC DRIVER 입니다

 

현재 개발을 하면서 DataBase없이는 개발을 할수 없는 상황입니다. 더군다나 BigData 시대라 불리우는데 DataBase가 없어서는 안될 필요 조건이라 생각됩니다.

 

엑셀에서는 2000년도 사용당시 DataBase는 사용한다는 생각을 안해봤지만 그이후 개발하면서 많은 DataBase에 정보를 수집하고 편집하고 하는 일들이 많았다 생각되어집니다.

그러므로 엑셀을 사용함에 있어 DataBase연결이 필수라 생각되어 지고 또한 연결을 통해 많은 정보들을 가져오기 위해 몇가지 설정들이 있습니다. 이제 이부분에 대한 설명을 하겠습니다.

 

윈도우에는 기본적으로 ODBC가 있습니다(데이터베이스를 연결하기 위한설정)

여기에 해당 드라이버를 설치하고 나면 사용할수 있는 드라이버를 등록되었을경우

엑셀에서는 ODBC를 통하여 DataBase에 연결하여 가져올수 있습니다.

 

윈도우 8이상은 검색에서 odbc를 입력하면 해당 odbc가 나옵니다. -> 현재 윈도우10 (버전수정)

 

os에 따라 64 bit or 32bit 두가지로 나오면 os 처리방식하고 동일한 office bit를 설치하길 권하여 드립니다. 그래야 서로 동일하게 처리할수 있습니다.

 

MS Window에서 ODBC 프로그램 실행 방법

 

해당 odbc를 실행하면 먼저 드라이버 텝에 연결하고자 하는 드라이버가 설치됬는지 확인이 필요합니다.

 

설정가능한 드라이버 확인(Oracle, Mysql, DB2등은 추가 설치가 필요함)

※ 참고로 OLEDB 는 첫번째 드라이버 추가 필수 이고 OLEDB에 시스템 DSN, 사용자 DSN에 Connect을 맺고

   기본적인 OLEDB로 모든 데이터 베이스를 연결할수 있도록 고안된 설정 프로그램임

ODBC연결은 DBMS에 관계없이 드라이버만 설치후 다 사용가능

▶ 엑셀에서 ODBC를 사용하기 위한 Driver 설치 

    ORACLE, MYSQL(마리아도 동일) 드라이버가 설치되어야 됩니다.

 

    1) Mysql or 마리아DB(설치과정 생략) : https://dev.mysql.com/downloads/connector/odbc/

 

  

             다운 파일 mysql-connector-odbc-8.0.13-winx64.msi

            설치후 odbc화면 : odbc가 설치됨을 확인할수 있습니다.

 

 

     2) Oracle  다운로드 및 설치 (odbc 패키지에 odbc_install.exe를 실행)

         ▶ 설치

 

* 아래의 홈페이지에서 아래의 파일을 다운로드한다.
  다운로드 사이트 : http://www.oracle.com/technetwork/topics/winx64soft-089540.html
  다운로드 파일명 
    instantclient-basic-windows.x64-11.2.0.3.0.zip
    instantclient-odbc-windows.x64-11.2.0.3.0.zip
    
* 다운로드 받은 파일의 압축을 해제한다.
  - 압축 해제하면 instantclient_11_2 폴더에 모든 파일이 존재한다.

* instantclient_11_2 를 C:\Oracle 폴더로 복사한다.
  - C:\Oracle 이 없으면 생성한다.

* 관리자 권한으로 DOS 창을 실행한다.
  - C:\Oracle\instantclient_11_2 폴더로 이동한 후, 아래와 같이 명령을 실행한다.
  - ODBC 설치가 정상적으로 되었으면 아래와 같이 성공 메시지가 보여진다.

*설치 실행
C:\Oracle\instantclient_11_2>odbc_install.exe
Oracle ODBC Driver is installed successfully. 

      드라이버 확인

Oracle ODBC 드라이버 설치후 드라이버 확인

    환경변수 등록: 검색에서 ->고급 시스템 설정 -> 환경변수 등록

ORACLE_HOME=C:\Oracle\instantclient_19_8
TNS_ADMIN=c:\Oracle\instantclient_19_8 ( tnsnames.ora 파일이 위치할 폴더 )
NLS_LANG=KOREAN_KOREA.KO16MSWIN949 ( 한글관련 설정 )
         KOREAN_KOREA.AL32UTF8  (이것도 있는듯)
PATH=c:\Oracle\instantclient_19_8 ( 기존 패스에 추가 )

   tnsnames.ora파일 생성 : ORACLE HOME 지정위치에 C:\Oracle\instantclient_19_8

# Generated by Oracle configuration tools.
# ORCL : 서비스 이름 또는 tns name
# DESCRIPTION : 접속하고자 하는 대상 데이터베이스 정보
# ADDRESS : 접속하고자 하는 데이터베이스 서버의 리스너를 호출하기 위한 주소 정보(프로토콜, 호스트, 리스너 포트)
# CONNECT_DATA : SERVICE_NAME 옵션을 이용하여 접속할 리스너 프로세스가 사용하는 서비스 이름을 지정하거나 
#                또는 SID옵션을 이용하여 데이터베이스의 SID명을 지정
# SERVER = DEDICATED : 오라클 서버와 연결시 생성된 프로세스를 전용연결 
                     Dedicated Server(전용 서버) 방식 혹은 Shared Server(공유 서버) 방식으로 운영함
# SERVICE_NAME = MYNAME : 오라클 서버의 리스너(listener.ora)에 기술된 서비스명 
                         / 서버측에 사용자 (DB관리자)가 임의로 작성하여 넣은 이름

ORCL=
(DESCRIPTION=
 (ADDRESS_LIST=
 (ADDRESS=(PROTOCOL=TCP)(HOST=아이피)(PORT=포트))
 )
 (CONNECT_DATA=
 (SERVER=DEDICATED)
 (SERVICE_NAME=xe)
 )
)

     3) DB2 Client 설치 

         다운로드 : http://www-01.ibm.com/support/docview.wss?uid=swg27007053
위 URL 접속하면 아래 화면이 보이는데 원하는 버전을 선택합니다.

 

IBM 다운로드 사이트

 

 

IBM Data Server Client'를 선택


다운로드 

          ※ 압축을 풀고 나면 실행파일 setup.exe 실행하여 제품 설치

 

DB2 Client 설치후 드라이버 확인

 4) SqlLite ODBC 설치

    다운로드 사이트 : www.ch-werner.de/sqliteodbc

 

SQLite ODBC Driver

SQLite ODBC Driver               The SQLite Database Engine provides a lightweight C library to access database files using a large subset of SQL92 without the overhead of RDBMS server processes. In order to use that functionality as a desktop datab

www.ch-werner.de

 

다운로드

    ※ 64bit는 w64.exe를 설치하시면 됩니다.

▶ 설치후 odbc 조회

     

ODBC 설치후 드라이버 추가 확인

 5) Mongo DB ODBC 설치

   다운로드 사이트 : docs.mongodb.com/bi-connector/master/reference/odbc-driver

 

MongoDB ODBC Driver for BI Connector — MongoDB Connector for BI

The 1.0.16 edition of ODBC Manager included with the MongoDB ODBC driver is not compatible with macOS Catalina. If you are on Catalina, download and install the latest version (1.0.19) of ODBC manager.

docs.mongodb.com

주의는 Visual C++ Redistributable For Visual Studio 2005가 설치되어 있어야됨

버전에 맞게 다운로드
ODBC 설치후 드라이버 추가 확인

툴에 기능에 많은것을 알면 좋지만 이정도만 알았으면 하는 기능을 중간정리 해봅시다

엑셀을 도구 만들기 좋은 하나는 천천히 한줄씩 처리하면서 처리과정 및 값들을 볼수 있고

또한 다시 위치를 위로 변경하고 값을 변경해서 디버깅하는 기능이 잘되어 있다고 생각되어 집니다.

이러한 기능을 사용하기 하단 3가지만 잘 사용하여도 됩니다.

 

▶ VBA 툴 사용 팁

    1) 편집: 중간에 툴이 나옴

    2) 직접실행창: 하단에 창이 나옴 특히 프로그램에서

        ex1) Debug.Print에서 값을 출력하면 나옴.

        ex2) 값을 변경할때는 직접실행에서 i=10 하고 Enter를 쓰면 값이 10으로 변경

     3) 조사식 : 마우스 오른쪽을 누르고 해당 변수를 등록해주면 값이나 속성들이 변경됨에 따라 많은 정보가 나옴

 

VBA도구에 주요 사용 메뉴

 

   4) 코딩시 일괄로 주석 처리 및 주석해제 단축키

 

 

여기서는 기본적은 VB의 문법을 소개 하고자 합니다.

엑셀 매크로는 VB의 문법을 사용하고 있고 추가로 엑셀의 함수를 지원하여 VBA라고 불리워 집니다.

 

그러므로 VB문법에 대해 소개 하고자 합니다.

 

▶ 변수선언 방법 두가지 : 명시적/묵시적

    Java 나 C를 해보신분은 변수를 선언하지 않으면 컴파일이 안됩니다 이것을 명시적이라 합니다..  

    VB에서는 기본적으로 변수 선언없이(묵시적) 으로 사용가능하지만, 코딩이 길어질때 오히려 명시적으로 하는것이 좋습니다. 

명시적 변수처리 하겠다 선언

그래서 변수 형이 지정되어 있지 않은 Variant 형이 VB에서만 존재 합니다.

Variant는 변수가 문자가 처음 저장되면 String형, 숫자가 저장되면 Integer로 알아서 내부적으로 적용됩니다.

 

 변수선언  및 타입 확인

 dim 변수명 as 변수타입    : 변수 선언방법
 
 ※ Integer, String,Variant   : 변수타입 종류  

   ※ as 부터 뒤에가 없으면 Variant(형이 없는)으로 선언되면 변수값이 저장될때 형이 지정됩니다.

 

▶ 조건문

if  조건문 then

elseif 조건문  ==> 생략가능

else              ==>생략가능

end if

ex)
If a > 10 Then
   MsgBox("10이상")
ElseIf b > 5 Then
   MsgBox("5이상")
Else
   MsgBox("기타")
End If 

 자바와 기본적으로 다른 문법을 사용합니다.

Java VB 내용
!= <> 조건문 다름
&& and 조건문 그리고
|| or 조건문 또는
== = 비교문 같음

 

 반복문 (For,  Loop)

java

VB

내용

for(int ii=0;ii<10;ii++){

   
break   //for문을 빠져나옴

}

for i=0 to 9 step 1
 exit for  'for문을 빠져나옴
next i

step 는 1씩 증가인데 없으면 자동으로 1씩 증가

next 뒤에 i는 증가할변수를 등록 없으면 알아서 함

  Do While i<9

   exit loop  'loop문을 빠져나옴
  I = I + 1
Loop
i가 9이하일때까지 처리
exit loop는 강제로 루프 빠져 나옴
  While i < 9
   i = i + 1
Wend
 위와 동일한 문법임

 

▶ 활용예시

    자 그럼 활용예로 엑셀시트에 1행부터 10행까지 x 10을 해서 쓰는거 , 쓴것을 읽는것을 한번 해봅시다

 

   1) 쓰기 예제

Public Sub 사용자처리()
 
    For i = 1 To 10
   
      Sheets("sheet1").Cells(i, 1) = i * 10
     
    Next
    
End Sub

   2) 읽기 예제

 For i = 1 To 10
   
     'vba 편집에서 보기->직접실행을 선택하면 하단에 debug.print한 값이 나옴
     '->자바에서는 붙여쓰기를 + 로 하는데 vb는& 로 함 +인경우는 연산자로 인식
     Debug.Print "시트내용:" & Sheets("sheet1").Cells(i, 1)
      
 Next

 

▶ 엑셀시트에 위치 및 셀에 값을 변경하기

Public Sub 사용자처리()
    Sheet("sheet1").Cells(3, 3) = "하하하하"
End Sub

※ 참고
Sheet("시트명") : 특정 시트
Workbooks("파일명").Sheet("시트명") : 해당파일명에 해당 시트명

ActiveWorkbook : 현재 활성화 되어 있는 파일 [("파일명")은 없음]
ActiveSheet    : 현재 활성화 되어 있는 시트 [("시트명")은 없음]

 

▶ 엑셀 시트의 위치를 선택하는 두가지 방법

 Range("C2") 라 직접 쓰는 방식이 있지만 우리가 반복작업을 하기위해 A->B->C를 FOR문이나  lOOP에서 돌리기 어렵기 때문에 Cells(세로줄 라인위치, 가로줄 라인 위치)를 사용합니다.

하단은 ' 로 주석을 하였고 동일한것으로 Cells명령어를 사용하여 작성해보았습니다.

End Sub
    '주석 엑셀 시트에 가져오는 방법
    MsgBox Cells(3, 3)         'Cells(행[y축] 위치, 열[x축] 위치) 표시
    MsgBox Range("C3")         'Range는 열은 영문으로 행은 위치로 표시  
   
End Sub

※ 주석은 ' 작은따옴표 하나이며 작은따옴표 뒤에는 전부 주석됨   

※ 위 두가지 방법은 동일한 결과를 갖게 됨

 

▶ 엑셀 시트쓰기, 엑셀시트에서 값을 사용하기

   등호(=)을 사용하고 오른쪽에 시트에 저장할값을 쓰면됩니다.

 Public Sub 사용자처리()
   
    Cells(3, 3) = "하하하하"                     '=>엑셀시트에 하하하하를 저장
    Range ("C3")= "하하하하"
    
    MsgBox  Range ("C3")                        ' 엑셀시트값을 사용하기
   
End Sub

  처리결과)

C3 또는 3,3에 값을 저장

 

 

Sheets는 일반 Visual Basic(일명 VB)에는 없는 함수로 엑셀에 내장되어 있는 VB로 사람들은 Visual Basic Application(일명 VBA) 라고 합니다. 

 

※ 요약정보

파일함수.시트함수.셀함수

파일함수 : ActiveWorkbook,Workbooks("파일명")
시트함수 : ActiveSheet. WorkSheet("시트명")
셀함수   : ActiveCell, Cell(행 위치, 열 위치), Range( 열 영문, 행위치)
           Range예) Range("D1") 하고 Cells(1,4) 는 동일함
           
※ Cells를 많이 쓰는이유는 For, Loop문으로 코딩하기 위해 많이 사용함

 

+ Recent posts