자격증/컴활 1급

[개미의 걸음 2과목 스프레드시트 일반] 기타작업② 프로시저

IT개미 데이터 2020. 9. 6. 23:23
728x90

VBA[Visual Basic for Application]

수치연산과 파일 처리 등의 기능을 손쉽게 자동화 할 수 있는 기능

 

VBA[Visual Basic for Application]관련 용어

개체
[Object]
프로그래밍 과정에서 작업한 내용이 실제 적용되는 독립된 대상
엑셀 VBA에서 개체는 통합 문서, 셀, 차트, 폼같은 엑셀의 구성요소를 의미
개체와 메서드 또는 개체와 속성은 마침표(.)로 구분해서 차례로 입력
메서드
[Method]
개체를 실행할 수도록 동작 또는 행동을 시키는 것 [특정 개체에서만 실행 가능한 프로시저]
메서드를 설정하려면 '개체명.메서드'와 같은 형식으로 입력
속성
[Property]
크기, 색, 화면 위치와 같은 개체의 특성이나 가능, 불가능과 같은 개체의 상태
속성을 설정하려면 '개체명.속성=값'과 같은 형식으로 입력
이벤트
[Event]
프로그램 사용 중에 일어나는 사건[마우스 클릭, 셀 이동 등]을 의미
이벤트가 일어났을 때 실행되도록 작성된 프로시저를 이벤트 프로시저라고 함
이벤트는 사용자가 마우스나 키보드를 움직이는 동작이나 프로그램의 실행 결과로 인해 발생
캐체에 딸 발생하는 이벤트의 종류가 다름
일반적으로 프로시저는 '개체명_이벤트명'과 같은 형식으로 입력

 

Workbooks 개체

엑셀 통합 문서를 의미

주요 속성 설    명
Count 통합 문서 개수
Name 통합 문서 이름
Windows 지정한 통합 문서의 모든 창
Worksheets 지정한 통합 문서의 모든 워크시트
Saved 통합 문서 저장 여부
주요 메서드 설명
Add 통합 문서 생성
NewWindow 통합 문서에 새 창을 만듦
Close 통합 문서를 닫음
Open 통합 문서를 염
Save 통합 문서 저장
SaveAs 통합 문서를 다른 이름으로 저장

 

Worksheets 개체

워크시트를 의미

주요 속성 설    명
Cells 워크시트의 모든 셀
Range 워크시트의 셀이나 셀 범위
Columns 워크시트의 모든 열
Rows 워크시트의 모든 행
EntireColumn 지정된 범위 내의 모든 열
Entirerow 지정된 범위 내의 모든 행
Name 워크시트의 이름
Visible 워크시트의 표시 여부 지정
주요 메서드 설명
Activate 해당 워크시트를 활성화시킴
Add 새로운 워크시트 삽입
Copy 워크시트 복사
Protect 워크시트 보호
Select 워크시트 선택

 

Range 개체

셀, 행, 열, 연속 셀 블록이 하나 이상들어 있는 셀 선택 영역을 의미

    ex> Range("A4") : A4셀

주요 속성 설    명
ActiveCell 현재 셀
Address 참조하는 셀 주소
Cells 지정된 범위의 모든 셀
    ex> Cells(4,2) : 4행 2열
Count 지정된 범위의 셀 수
Currentregion 데이터가 있는 인접 영역의 범위
    ex> Range("a4").CurrentRegion
End 지정된 범위의 마지막 셀
Next 다음 시트나 셀
Offset 지정된 범위에서 떨어진 범위
Range 셀이나 영역 범위
Value 지정된 셀

 

 

 

상수와 변수

상    수 항상 같은 값을 유지하는 수
사용자 정의 상수와 내부 상수가 있음
내부 상수 : VBA가 미리 제공하는 상수
사용자 정의 상수 : 사용자가 지정하는 상수 [내부 상수와 같은 이름의 사용자 정의 상수 사용 불가]
변    수 상황에 따라 변하는 수
변수 선언은 '키워드 + 변수이름 + As 데이터 유형'으로 이뤄짐
변수 선언 키워드 종류
    Private : 모듈의 처음에 선언하며 해당 모듈 내의 모든 프로시저에서 사용 가능
    Public : 모듈의 처음에 선언하며 모든 모듈에서 사용 가능
    Dim : 선언하는 위치에 따라 사용 범위가 다름
            프로시저의 처음에 선언하면 해당 프로시저 내에서만 사용 가능
            모듈의 처음에 선언하면 해당 모듈 내의 모든 프로시저에서 사용 가능
    Static : 프로시저의 처음에 선언
              해당 프로지서 내에서 사용 가능
              프로시저 종료 후에도 값이 유지됨

 

프로시저

특정 기능을 실행할 수 있도록 나열된 명령문의 집합

  • 프로시저들의 집합을 모듈이라고 함
        → 프로시저들은 모듈 안에서 구성됨
        → 모듈은 프로젝트를 구성하는 기본 단위
  • 사용자가 기록한 매크로도 하나의 프로시저
  • 프로시저 이름 지정 방법[= 변수 이름 지정 방법]
        1. 문장 부호나 공백 사용 불가
        2. 255자까지 가능
        3. 문자, 숫자, 언더바(_) 사용 가능
        4. Visual Basic 키워드를 이름으로 지정 불가

프로시저의 구분

프로시저 설명
Sub ~~
End Sub
가장 일반적인 형태로 별과값을 반환하지 않음
작성된 Sub 프로시저는 어크시트에서 매크로처럼 연결하여 사용 가능
Function ~~
End Function
실행된 결과값을 반환할 때 사용
작성된 Function 프로시저는 워크시트에서 일반 내장 함수와 같은 방법으로 사용
Property ~
End Property
개체의 속성을 새로 정의할 때 사용
개체 할당[Property Let()], 개체 읽기[Property Get()], 개체 참조[Property Set()]등이 있음

 

 

 

 

예제문제

 

1. 프로시저 작성

  • [개발도구 → 코드 → Visual Basic]을 선택하거나 Alt +F11을 눌려서 Visual Basic Editor 실행
  • sheet8을 클릭한 후 cmd입력을 눌려서 '입장료입력.Show'입력

 

2. 초기화 설정

  • '입장료입력' 폼에서 빈 곳 더블 클릭
  • UserForm에서 Initialize를 선택
  • 목록을 표시하기 위해 '개체명.RowSource = "목록에 표시될 데이터 범위"'을 입력
        혹은, '개체명.Additem"데이터 입력 내용"'으로 하나씩 지정
              ex> Cmbo구분.Additem"동물원"
                    Cmbo구분.Additem"테마가든"
                    Cmbo구분.Additem"패키지"
  • 첫번째 항목이 기본으로 선택되게 하기 위해 '개체명.ListIndex = 0'을 입력

※ 변경된 셀 글꼴 변경

폼이 아닌 해당시트에서 작업!! [해당시트 선택 후, worksheet클릭]
    → 글  꼴  체 : Target.Font.Name ="변경할 글꼴체명"

    → 글꼴 크기 : Target.Font.Size = 12

    → 굵기 조절 : Target.Font.Bold = True

    → 이텔릭체  : Target.Font.Italic =True

※ 목록을 표시할 때 지정한 열이 모두 보이도록 할 것!
    → Cmbo구분.ColumnCount = 3

 

 

3. 입력 클릭시 데이터 등록

  • '입장료입력'폼에서 입력 더블 클릭
  • 인원수 값이 0보다 클때만 입력되고 0이하는 '인원수를 입력하시오!'라는 메세지를 출력하시오
       → if Text인원수 >0 Then
               ~~~~
           Else
               MsgBox "인원수를 입력하시오!"
           End If
  • 데이터를 추가하거나 삭제하여도 항상 마지막 데이터 다음에 입력되게 하시오
        → 먼저 표 범위를 알기 위해 b2셀을 선택한 후에 [Ctrl + A]키를 눌림
                ※  [B2:G3]범위로 설정되어있음을 확인 가능!
        → 입력행 = Range("b2").CurrentRegion.Rows.Count + 2
                ※ Range("표의 첫셀").CurrentRegion.Rows.Count
                ※ 이 문제에서는 범위가 2행으로 되어 있으므로 Range("b2").CurrentRegion.Row.Count=2  
  • 입장료는 List대상 목록을 이용해 입력하시오
        → 리스트 = List대상.ListIndex
        → Cells(입력행, 3) = List대상.List(리스트, 0)
            Cells(입력행, 4) = List대상.List(리스트, 1)
  • 금액 =  인원수 * 입장료
        → 우선, Cells(입력행, 6) = Text인원수 * List대상.List(리스트, 1)로 입력하고 결과보기
        → 인원수를 문자열로 인식하여 왼쪽 정렬이 됨을 알 수 있음!!
        → val()을 사용하여 숫자형식으로 변경해줌
        → Cells(입력행, 5) = Val(Text인원수)
            Cells(입력행, 6) = Val(Text인원수) * List대상.List(리스트, 1)
  • 작업일은 시스템의 현재 날짜가 입력되도록 처리하시오(Date 이용)
        → Cells(입력행, 7) = Date

 

 

+ '취소' 버튼을 눌리면 폼 닫히면서 [K10]셀에 '종료합니다' 문자열이 출력되도록 하기

  • 입장료 입력 폼에서 [취소]버튼 더블 클릭
  • Unload Me 밑에 Range("k10") = "종료합니다."입력
    혹은 Cells(10,11) = "종료합니다." 입력

 

728x90