IT 관련/엑셀

VBA 변수, 상수, For Each, 이벤트 비활성

과정에서 오는 행복 2013. 11. 21. 12:27

[변수선언] 
 Dim 변수명 As 데이터타입
 변수명 = 값


[변수선업 옵션]
 VBE창 [도구] - [옵션] - 변수 선언 요구
  체크하면 : 선언되지 않은 변수는 사용할 수 없음 (창 상단에 Option Explicit)
  체크하지 않으면 : 선언없이 변수를 사용할 수 있음

[상수선언]
Const 상수명 As 데이터타입 = 값


[메시지박스]
Msgbox prompt, buttons, title
Msgbox 메시지내용, 버튼종류, 타이틀명
ex) Msgbox "안녕하세요" , vbOkOnly, '메시지창'

[입력창]
InputBox prompt, title
InputBox  메시지내용,  타이틀명
InputBox "입력하세요", "입력창"
단, 입력된 값을 변수에 넣을 경우, InputBox ("입력하세요", "입력창")


[개체변수]
Dim 변수명 as 개체타입

ex) Dim 시작위치 As Range
set 시작위치 = Range("A1")

엑셀 작업시 영역을 지정하여 [이름정의]하여 사용하는 것이 좋다.


[배열변수]
 Dim 변수명(배열갯수-1) As 데이터타입


[동적배열]  - 배열의 갯수를 정확히 모를 경우
  Dim 변수명() As 데이터 타입 
  Redim 변수명(8)   // 배열의 갯수를 확정 짓는다

  배열의 갯수가 부족하여 늘릴경우 
   Redim 변수명(9)
   확장이 가능하다.  (단점 : 배열의 값을 다 지운후에 다시 배열한다.)

  Redim Preserve 변수명(9)
  ※ Preserve를 사용하면 배열의 값을 지우지 않고 배열의 값을 늘린다.
  

[LBound, UBound함수]
 LBound 함수 : 배열의 첫번째 방의 인덱스 번호를 반환
 UBound 함수 : 배열의 마지막 방의 인덱스 번호를 반환

동적배열변수의 방의 갯수를 알고자 할 경우,
 UBound(변수명) - LBound(변수명) + 1
 ※ 배열의 첫번째 인덱스가 무조건 0이 아니기 때문에 

[For Each ... Next]문
// 워크시트의 이름과 특정 셀의 값을 "점수"라는 워크시트로 가져오기

    Dim sheet As Worksheet
    Dim i As Integer
   
    Range("B3:C9").ClearContents
       
    i = 3
    For Each sheet In ThisWorkbook.Worksheets
       
        If sheet.Name <> "점수" Then
            Range("B" & i).Value = sheet.Name
            Range("C" & i).Value = sheet.Range("D2").Value
           
            i = i + 1
        End If
               
    Next

[속도를 높이기 위한 엑셀기능 비활성화]

- 매크로 작업전에 설정해 놓음
   '참조된 값 계산
    Application.Calculation = xlCalculationManual
    '이벤트 활성
    Application.EnableEvents = False
    ' 화면 업데이트
    Application.ScreenUpdating = False


- 스크립트 마지막에 다시 복원함
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True
    Application.ScreenUpdating = True


반응형