«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

매일 채워가는 꽃바구니

VBA #4. 기본기 및 Language 본문

VBA Excel

VBA #4. 기본기 및 Language

Mr.Flower 2009. 8. 2. 23:28

함수 방식의 기본적인 VBA 코딩을 해보았다.
그리고 이번 글에서는 조금 딱딱한 진행을 할 수밖에 없을 듯하다. 이론적인 부분을 많이 해야하기 때문이다.



1. 개체(Object)
엑셀 상에서 코드를 통해 다룰 수 있는 물건들을 개체라고 한다. 크게 본다면 엑셀에서 확인 할 수 있는 개체는 워크북, 워크시트, 차트, 셀범위 등이 있을 것이다.


2. 속성(Property)
개체가 가지고 있을 수 있는 성격을 의미합니다. 예를 들어 셀의 내부색을 빨강으로, 글자의 크기를 13으로, 워크시트의 이름을 Sheet5로, 통합문서의 시트의 개수를 7개로, 등등으로 표현할 수 있다.


3. 방법(Method)
동작에 해당하는 의미의 단어로써. 프로그램을 종료하라. 셀의 내용을 복사하라. 등의 직접적인 명령이 정의되는 것을 의미한다. 이때 해당 개체를 선정해주지 않는다면 무의미한 동작이 될 수 도 있다. (이때의 코드는 에러를 발견할 것이다.)


4. 디버그(Debug)
코드의 에러가 생겼을 때 이를 수정하는 작업을 의미한다. Bug는 오류가 발견된 코드를 지칭하며, 이를 직접 발견(Detecting)해주는 것 또한 VBA의 역할이다. 잘못된 코딩을 했을 경우에는 실행이 되지 않으며 Debug창으로 바로 넘어간다는 것을 알아두자.


5. 변수(variable)와 상수(constant)
변수는 '할 수 있는 '를 의미한다. 상수는 '항 일정하게 정해져있는 '를 의미한다.
예를 들어 사람의 이름을 입력받아 각각의 사람에게는 일정하게 10만원의 금액을 지급한다고 가정하면,

사람의 이름이 들어갈 문자열 변수를 만들어야 할 것이다.
그리고 10만원이라는 일정한 상수 변수를 하나 만들어야한다.



* 엑셀에 간단한 버튼을 만들어 본인의 이름을 입력받고 그 이름을 차근차근 입력하는 코드를 직접 작성해보자. *

포함된 자료중 Excel 파일을 받고, 실행하신 후
아래 방법중 되는 것을 선택해서 시트1에 있는 [레코드 입력] 버튼이 활성화 되도록 한다.

1. 보안 경고 줄이 있다면 [옵션] 버튼을 눌러서 [이 콘텐츠 사용]을 선택한다.
(이 메뉴가 안보이면 2로 간다.)


2. [개발 도구] 메뉴에서 [매크로 보안] - [ActiveX 설정] - [최소한의 제한 사항으로 모든 컨트롤을 사용하기 전에 확인] - [확인]을 차례로 선택한다.
다시 1번으로 돌아간다.



시트1의 데이터 입력부분에 원하는 데이터를 입력하고 버튼을 누르자.

확인 메세지를 확인하고, 시트 2에 정확히 입력되는지 확인한다.

몇 번정도 더 데이터 편집과 입력을 반복해본다.



소스 분석.
***********************************************************************************

Private Sub CommandButton1_Click()
    Dim cnt2 As Integer
    Dim msg As String
    Dim check As Integer
    Dim k As Integer
    'cnt2 변수는 시트2에 몇번째 데이터까지 입력되있는지 확인한다.
   'msg 변수는 메세지를 저장하는 문자열 변수이다.
   'check 변수는 메세지창에서 Yes/No를 저장하는 변수이다.
   'k 변수는 시트2에 순번을 나타내는 일련번호 변수이다.


   
    k = Sheets("sheet2").Range("B2").CurrentRegion.Rows.Count
    cnt2 = Sheets("sheet2").Range("A2").CurrentRegion.Rows.Count + 2
   'k 변수는 시트2의 B2와 연결되어있는 (즉, 데이터가 있는곳) 레코드의 개수를 셈
   'cnt2 변수는 A2에서 연결된 레코드의 개수에 2를 더한다. (즉, 빈셀을 찾는다.)

    
    If Range("A3") = "" Or Range("B3") = "" Or Range("C3") = "" Then
        msg = MsgBox("데이터 입력란을 확인하세요.", 0, "Mr. Flower")
   '입력되는 셀에 비어있는 셀이 있다면 에러를 출력.

    Else
        msg = Cells(3, 2).Text & "세 " & Cells(3, 1).Text & "님 안녕하세요. 취미가 " & Cells(3, 3).Text & "?? 맞나요??"
        check = MsgBox(msg, vbYesNo, "Mr.Flower")
   '정보 확인 메세지를 출력하고 선택값을 check 변수에 저장한다.        

        If check = vbYes Then
            MsgBox "확인된 데이터를 입력합니다."
            Sheets("Sheet2").Cells(cnt2, 1) = k
            Sheets("Sheet2").Cells(cnt2, 2) = Sheets("sheet1").Cells(3, 1)
            Sheets("Sheet2").Cells(cnt2, 3) = Sheets("sheet1").Cells(3, 2)
            Sheets("Sheet2").Cells(cnt2, 4) = Sheets("sheet1").Cells(3, 3)
            Sheets("Sheet2").Cells(cnt2, 5) = "확인됨"
   'check 변수의 내용을 확인해서 셀 값을 직접 대입한다.
   '다른 구문을 이용하면 보다 더 깔끔하게 정리될 것이다. 조만간의 회차에서 다룸.


        Else
            MsgBox "확인되지 않은 데이터를 입력합니다."
            Sheets("Sheet2").Cells(cnt2, 1) = k
            Sheets("Sheet2").Cells(cnt2, 2) = Sheets("sheet1").Cells(3, 1)
            Sheets("Sheet2").Cells(cnt2, 3) = Sheets("sheet1").Cells(3, 2)
            Sheets("Sheet2").Cells(cnt2, 4) = Sheets("sheet1").Cells(3, 3)
            Sheets("sheet2").Cells(cnt2, 5) = "확인되지 않음"
        End If
   'No가 선택되었을 때 실행되는 부분.

        
        k = k + 1
   'k 변수의 값을 증가시키는 부분. 없어도 상관없을 것이다. 지워보자. (필자는 확인하지 않았음.)

    End If
   
   
End Sub


***********************************************************************************

조금은 복잡하게 코드를 작성했다.
추후에 배울 다른 명령어를 사용하면 좀더 깔끔하고 간략한 데이터를 요약할 수 있을 것이다.

코드를 작성할 때 들여쓰기를 꼭 사용해서 작성하는 연습을 하도록하자.

참고로 버튼의 이름이 commandButton1 으로 설정이 안되어 있다면 이는 실행되지 않는다.

다가오는 회차에서는 좀더 깔끔하게 코드를 작성할 수 있도록 해보자.