Tech/Office

Excel Macro - VBA

onesixx 2010. 5. 7. 12:29
반응형

Excel 2007에서 사전작업

1. Microsoft Office 단추 단추 모양를 클릭한 다음 Excel 옵션을 클릭
2. 기본설정에서 리본 메뉴에 개발 도구 탭 표시 확인란을 선택
3. 메뉴중 개발도구 추가된 것 확인

image

image

개발도구> 매크로보안> 매크로 설정.

image

Excel 2007 버전부터는 파일의 확장자 끝에 'x'(XML을 의미)가 하나 더 붙습니다.
즉 Test.xlsx와 같은 형태로 저장됩니다.
만약 파일에 매크로나 VBA 코드가 포함되어 있는 경우에는
'Excel 매크로 사용 통합 문서' 즉 파일이름.xlsm의 형태로 저장해야 합니다.

Excel 2003의 경우, 하나의 시트에사 사용 가능한 셀의 수는 16,777,216개 (65,536행 X 256열)였습니다. Excel 2007 버전에서는 이것이 대폭 늘어나서 17,179,869,184개 (1,048,576행 X 16,384열)의 셀을 사용할 수 있습니다. 따라서 이전 버전에 비해 작업 공간이 1,024배 증가 하였습니다 (행 16배, 열 64배). 이 정도 공간이면 대용량의 데이터를 관리하기 위해 예전처럼 워크시트를 나누거나 VBA로 코딩을 하거나 할 필요는 없을 듯 합니다.

매크로 VBA

매크로를 실행 방법 3가지

1) 지정된 바로가기 키
2) 개발도구> 매크로 를 클릭> 실행시킬 매크로로 선택> [실행] 버튼 Click.
3) 매크로와 연결된 버튼 클릭

매크로를 만들기

1) 매크로 기록 : 내가 작업한 내용을 엑셀이 알아서 VBA 코드로 기록
2) 직접  VBA (Visual Basic for Applications ) code 입력

화면 및 용어 설명

*VBE창 (창)

프로젝트 탐색기 :  Crtl+ R
속성창 : F4
코드입력창: F7
직접실행창: Crtl +G


*모드  - 디자인 모드 , 디버깅 모드, 런타임 모드변수

Application , 개체 (Object)

- 모든 것을 외우려하지말고, 매크로 기록기로 원하는 동작을 해보고 메서드와 속성을 확인해 본다. 
- 도움말을 적극 활용

Application =  Excel ...

Excel은 47개의 Object로 이루어져있다.

* Object

* Collection (컬렉션) :
  같은 클래스의 집합체, 관련 개체 집단을 포함하는 개체
     엑셀 계보도에서 오브젝트 뒤에 s가 붙은 것(예를 들면 Workbooks, Worksheets, Names, Windows,...)
     여러 개가 모여서 하나의 큰 덩어리를 이루고 있는 집합체

     컬렉션에서 개체의 위치는 컬렉션 내에서 변화가 생길 때마다 바뀔 수 있어 
     컬렉션 내에서 특정 개체의 위치는 변할 수 있습니다.

   예) 셀 영역 A1:A100 이라는 영역이 있다면, 
         셀 하나하나가 개체가 될 수 있으므로  그 셀의 집단을 컬렉션이라 할 수 있다.
   예) 유저폼에 작성한 텍스트 박스등 컨트롤 들의 집단도 될 수 있습니다.


Excel 개체 모델 참조 ,  Excel 2007 개발자 참조>참조 ,   애플리케이션 오브젝트의 계보



Control

콘트롤은 앞에서 살펴본 단추모양이나 텍스트 박스 등을 가리키는 말입니다.
이러한 콘트롤은 윈도우 프로그램을 구성하는 기본이 되며, 엑셀에서는 이 콘트롤을 개체라는 개념으로 이해하면 됩니다.
개체는 통합 문서, 워크시트, 차트, 셀 영역과 같은 엑셀의 한 요소를 의미하는 것입니다.

1. Property(콘트롤에 대한 변수) 
메쏘트처럼 각 콘트롤들은 자신에게만 적용될 수 있는 변수들이 별도로 마련되어 있는데, 이것을 속성이라고 합니다
읽기/쓰기가 가능한 속성
읽기 전용 속성

  • Value 속성:  어떠한 개체가 가지고 있는 값을 읽어오거나 값을 할당(저장)하고자 할 경우에 사용
  • Offset 속성: 지정한 범위부터 오프셋되는 범위를 나타내는 Range 개체를 반환 <읽기전용>
                          expression.Offset(RowOffset, ColumnOffset)
                        Ex) A1 셀로부터 행(Row) 방향으로 3, 열(Column) 방향으로 3 만큼 떨어진 셀을 구하려면
                              Range("A1").Offset(3,3) 이라고 합니다. --> D4
  • Name 속성: 개체의 이름을 반환해 주거나 변경
  • Count 속성: 지정된 개체의 개수 구하기
                         Ex) myCnt = Workbooks.Count
  • WorksheetFunction속성: 엑셀의 워크시트에서 사용하는 함수들을 VBA 에서도 사용할 수 있도록 제공
                                            Application(Excel) 개체에 딸린 속성  ex) Application.WorksheetFunction.Max(rng)
  • Formula 속성: 셀에 수식 또는 값을 대입할 때 사용 
                           (그러나 수식이 아닌 값을 대입할 경우는 보통 Value 속성을 이용)                       ex) 셀 영역 A1:A10의 합을 구하는 =SUM(A1:A10) 이란 수식을 A11 셀에 입력
                                 Range("A11").Formula = "=SUM(A1:A10)"
                          ex) B1 셀에 A1 셀부터 데이터가 있는 A 열의 마지막 데이터가 있는 셀 까지 지정하여 SUM 함수를 입력
                                1) 중간에 빈 셀도 포함여 A 열의 맨 마지막 셀까지 계산
                                 Range("B1").Formula = "=SUM(A1:A" & Range("A65536").End(xlUp).Row & ")"
         A65536 셀에서 처음으로 유효한 데이터를 만나는 셀까지(빈 셀이 아닌 처음 셀) 이동하되 방향은 위로 이동하라
         A65536 셀로부터 처음으로 빈 셀이 아닌 셀이 A100 셀 이라면 위 코드는 100 이라는 값을 되돌리게 되고 
         코드는  "=SUM(A1:A" & 100 & ")" ==> "=SUM(A1:A" & 100 & ")" ==>"=SUM(A1:A100)"
                                 2) 간에 빈셀이 있는 것은 무시하고 현재 연속된 영역에 대해서만 계산                         
                                 
                                 Range("B1").Formula = "=SUM(" & Range("A1").CurrentRegion.Address & ")"
             다만 A 열과 연속된 B 열에 어떠한 값이 있다면 곤란하므로 Resize 속성을 이용하여 다음과 같이 수정합니다.
                        ==>    Range("B1").Formula = "=SUM(" & Range("A1").CurrentRegion.Resize(,1).Address & ")"
                                  
  • FormulaArray 속성:  Formula 속성과 마찬가지로 셀에 수식을 입력할 때 사용하지만
                                   다만 다른 것은 수식을 배열 수식으로 수식을 입력하고자 할 경우에 사용

    2. Mothed (콘트롤에 대한 함수)
    콘트롤들은 매우 다양한 성격을 가지고 있서 이들의 기능이나 작동은 서로 다릅니다.  이러한 콘트롤들에는 이들을 제어할 수 있는 별도의 함수들이 내장되어 있는데, 이렇게 해당 콘트롤에 대해서만 호출하여 사용할 수 있는 함수들
    주의:   절대적으로 사용하지 않으면 안될 경우를 제외하고는 Select , Activate, Goto(특히) 메서드는 사용안함.

    • Select 메서드  :  개체( 셀 영역, 차트, 그리기 개체등) 를 선택하라.

                               ex) A1 셀을 선택하려면   Range("A1").Select

                               ex) A1:B1 셀을 선택하려면 Range("A1:B1").Select

    • Activate 메서드 : 개체를 활성화 하라

                               활성화란 편집 가능한 현재 셀 또는 현재 개체로 만든 다는 점에서 Select 와 틀립니다.

                               따라서 Activate 메서드는 유일한 하나의 개체만을 반환 한다는 것입니다.

    • Goto 메서드 : 범위를 선택,   선택한 통합 문서가 활성화되어 있지 않으면 활성화시킵니다.(속도때문에 잘 안씀)

    • Add 메서드 :  컬렉션(통합 문서, 시트, 차트등)에 개체를 추가하고자 할 경우에 사용

                           ex) Set NewWorkBook = Workbook.Add  <-- Set 문을 이용하여 새 문서를 (빈 문서) 추가

                                 Set NewWorkSheet = NewWorkbook.Sheets.Add  <--Set 문을 이용하여 새문서에 시트를 하나 추가

    • Intersect 메서드 :  둘 이상의 범위에서 사각형 모양의 겹치는 부분을 나타내는 Range 개체를 반환.

                             expression.Intersect(Arg1, Arg2, ...)

    • ClearContents: 셀에 입력된 값/수식을 지움  (셀을 선택하고 키보드에서 Delete 키를 누른것과 동일한 효과)

                              ex) Sheet1의 셀 범위 A1:G37에 있는 수식을 지우는 예제

                                    Worksheets("Sheet1").Range("A1:G37").ClearContents 

                             ex) Chart1에서 차트 데이터를 지우는 예제

                                    Charts("Chart1").ChartArea.ClearContents

    • Delete 메서드  : 셀 또는 개체를 삭제 (셀을 선택하고 편집 -> 삭제를 선택했을때와 동일한 효과)

                             ex)  A1:A3 셀에 각각 1,2,3 이라는 값이 있다고 한다면할때 A2 셀이 삭제되고

                                   결과는 A3 셀이 위로 한칸 당겨져 올라와 A2 셀의 값이 3이 되게 됩니다             

                                   Range("A2").Delete

    3. Event  : 콘트롤에 대한 사용자나, 환경에 대한 반응

    • Click 이벤트 : 컨트롤을 마우스로 클릭했을 때 발생되는 이벤트
                             ex) Private Sub CommandButton1_Click()
    • Change 이벤트 : 컨트롤이 가지고 있는 값이 변경되었을 때 발생되는 이벤트.
                                ex)  텍스트 박스에서는 사용자가 키입력을 할 때,
                                       콤보 박스나 리스트 박스에서는 사용자가 목록을 선택했을 때.
                                       Private Sub TextBox1_Change()

    주요 Object

    1. 워크북 오브젝트(Workbook Object)    =  엑셀 파일 (엑셀 통합 문서)

               Excel.exe 파일을 클릭하는 순간 Book1.xls 라는 워크북 오브젝트가 생성
        ==>  Excel.exe가 가지고 있는 Workbook Class에 의해 새로운 워크북 오브젝트가 생성되는 것
       

        ex) 새로운 통합 문서가 하나 만들기         
                Workbooks.Add
        ex) 새로 만들어진 통합 문서를 Temp.xls라는 이름으로 저장까지
                Workbooks.Add
                ActiveWorkbook.SaveAs Filename:=Application.DefaultFilePath & "\Temp.xls"


    2. 워크시트 오브젝트(Worksheet Object)  = 워크시트 그 자체

        ex) 워크시트 삽입하기                           Worksheets.Add
              워크시트 삽입하기 (삽입 위치와 매수지정)   Worksheets.Add   after:=Worksheets(1), Count:=2 
              시트 선택하기                                   Worksheets("Sheet2").Activate
              시트 선택하고 이름 바꾸기             Worksheets("Sheet2").Activate
                                                                         ActiveSheet.Name = "MySheet"
              시트 이동 / 복사하기      Worksheets("Sheet1").Move     after:=Worksheets("Sheet3")
              시트 삭제하기                 Application.DisplayAlerts = False       '확인박스 안나오도록 
                                                       ActiveSheet.Delete
                                                       Application.DisplayAlerts = True

    3.  레인지 오브젝트(Range Object)

    엑셀에 입력되는 대부분의 데이터들이 바로 Range 오브젝트에 보관

    Range 오브젝트에 접근하는 방법
    - 앞에 아무 것도 붙이지 않으면 현재 워크시트를 대상

    Range.Range 속성   
           Ex) 'Sheet1' 시트의 A1 셀에 '100' 이라는 값이 입력           Worksheet("Sheet1").Range("A1").Value=100
                  B3:E7 영역의 모든 행들에 'Test' 라는 문자열입력      Range("B3:E7").Select
                                                                                                          Selection.Rows = "Test"
                 열B, 열C, 열D,열E까지 'Test' 라는 문자열입력              Columns("B:E").Value = "Test"
                 행3, 행4, 행5, 행6까지 'Test' 라는 문자열입력             Rows("3:6").Value = "Test"

                                                                                                          Range("B2:E3").Select
                 이미 선택된 상태에서 범위를 열전체로 확대              Selection.EntireColumn.Select
                 이미 선택된 상태에서 범위를 행전체로 확대              Selection.EntireRow.Select

    Range.Cells 속성
           Cells(행, 열)의 형식으로 표기 (Range 속성의 표현방법과는 반대 순서)
           Cells 프로퍼티의 가장 큰 장점은 인수에 숫자값을 사용할 수 있다는 것입니다

           Ex)현재 시트의 B5 셀에 숫자 '100'을 입력합니다.                 Cells(5,2) = 100
                Range속성과 함께                                                               Range(Cells(3, 2), Cells(10, 5)).Select
                B2:E9 영역 내에서 행 방향 3번째, 열 방향 2번째에 셀   Range("B2:E9").Cells(3, 2) = 100

    Range.Offset 속성
           Ex) Sheet1에서 현재셀부터 오른쪽으로 3열, 아래로 4행      ActiveCell.Offset(rowOffset:=3, columnOffset:=4).Activate

    Application.Union 메서드를 사용하는 방법

     

    CurrentRegion 속성: 특정한 셀에 인접해 있는 영역    (현재 영역을 나타내는 Range 개체를 반환) 
                                     현재 영역은 빈 행과 빈 열로 둘러 싸인 범위, 읽기 전용
                                     (자기 자신을 둘러싸고 있는 인접한 바로 옆 셀이 빈 셀이 아니면 그 셀이 포함된다는 말)

    UsedRange 속성 :  떨어져 있는 영역을 포함하여 '워크시트 중에서 사용된 모든 영역'을 선택

                                   *Worksheet 오브젝트의 속성 : 즉, Range("A1:E100").Select 와 같은 형태로는 사용할 수 없다

     

    변수/상수, 배열

*데이터 형식: 보유할 수 있는 데이터의 종류를 결정하는 변수의 특성을 의미
                      Byte, Boolean, Integer, Long, Currency, Decimal, Single, Double, Date, String,
                     Object, Variant(기본값), 그리고 개체의 특정 형식 뿐만 아니라 사용자 정의 형식을 포함

* 배열

정적배열: 변수를 배열로 선언할 때 그 차원의 크기가 이미 정해진 배열
Ex)  Dim MyArray(100)     As Integer               '숫자로 정확하게 그 크기가 결정
       Dim MyArray1(10,20) As Single

동적배열:  변수를 배열로 선언할 때,  그 차원의 크기가 모를경우 그 크기를 유동적으로 조정할 수 있는 배열
Ex)  Dim MyArray() As Integer

* 상수 선업 방법
         1) Const 상수명 As  데이터형식 = 값 
             자동으로 그 값에 따라  적당한 형식이 지정. (기본값은 Private)
             (편리한  프로그램의 수정/유지보수가 편리, 프로그램의 이해가 용이하게하기 위해 사용
               Const pi As Double = 3.141592654)

         2) Built-in 상수
           

* 변수의 선언 방법
         1) Dim     변수명 As 데이터형식  
             As 절을 사용하지 않으면 Variant 형식으로 지정
             배열변수:
Dim A(1 To 65536) As Integer   ' A열모두
                              Dim myArray(1 To 65536, 1 To 256) As Integer

2. ReDim 문
   Private, Public 또는 Dim 문에 의해 이미 명시적으로 선언된 동적배열의 크기를 지정 혹은 재확정
  
ReDim [Preserve] varname(subscripts) [As type] [, varname(subscripts) [As type]] . . .

3. Public 문
  
변수를 프로젝트 어느 곳에서든 사용하고자 할 경우에 사용합니다. (전역 변수, Global 문)

4. Private 문
  
변수를 지역으로 사용하고자 할 경우에 사용합니다. (지역 변수)

6. Static 문
   
프로시저 수준에서 선언된 모든 변수는 프로시저가 종료되면서 그 수명을 다하게 됩니다.
    그러나 어떠한 목적에 의해서 프로시저가 종료되었으나 그 프로시저가 다시 호출 되었을 때 
     그 값을 유지하고 싶은 변수가 있다고 할 경우에 사용됩니다.

5. Type 문
  
하나 그 이상의 구성요소를 가지는 사용자가 정의하는 형식을 선언할 때 사용( 모듈 수준에서 선언) 
   예)  Dim 회원성명 As String
          Dim 전화번호 As String
          Dim 주소     As String
          Dim 가입일    As Date

    ==> Type 회원정보
                   회원성명 As String
                   전화번호 As String
                   주소       As String
                   가입일    As Date
            End Type

            Dim MemberInfo  As 회원정보
            Dim 회원성명     As String

7. Enum 문
   
특정 목적을 위한 그룹화된 변수들을 선언할 때 사용
    (Enum 문으로 선언된 형식을 With 문 사용불가
    Enum 문은 모듈 수준에서만 나타날 수 있다)

    예)   Enum myColor
                     cError = 3                   ' 빨강색
                     cCaution = 5               ' 파랑색
                     cCanNotKeyIn = 15     ' 회색 25%
                     cKeyIn = -4142            ' 색상없음(셀의 기본 바탕색)
                      cHasNoData = 34       ' 연한 옥색
            End Enum


8. Deftype 문    선언된 변수의 형식을 결정하고자 할 경우 사용( 각 형식을 지정할 문자는 대소문자를 구분안함.)

*변수의 수명
           프로젝트 - 클래스 ( Procedure1, Procedure2, ....)
                          - 폼     ( Procedure1, Procedure2, ....)
                          - 모듈  ( Procedure1, Procedure2, ....)



  

연산자

1. 산술 연산자
  + , -, *, / , ^ (지수승, POWER 함수와 동일),  \    (몫,  QUOTIENT 함수),  Mod (나머지, MOD 함수)
2. 비교 연산자
  <,<=, > >=, =, <>, Is (두개체가 가르키는 변수의 동등비교), Like (문자열비교- ? * # 등 사용)
3. 문자열 연결 연산자
  &
4. 논리 연산자
   And , Eqv,  Imp,  Not,  Or,  Xor


*문: 선언문 : 변수나 상수, 프로시저의 데이터 형식과 이름 정함
      지정문 : 변수나 상수에 값이나 식을 지정
      실행문 : 동작을 초기화하는 문.  메서드나 함수를 수행할 수 있고 코드 블록을 반복하거나 분기가능


* Set 문
변수에 개체를 참조하도록 할당하는 경우에 사용 (변수는 Object 형식으로 선언)
개체를 참조하도록 한다는 것은 지정된 개체가 가지고 있는 속성들의 값을 읽거나 쓰거나 할 수 있도록 한다는 것
Set 문은 보통 Workbook, Worksheet, Range 등 통합문서와 관련된 부분에 많이 사용(아래의 방법 말고도 많은 방법이 있다.)

1) "Book1.xls" 라는 문서를 참조
Dim myBook    As Workbook
Set myBook = Workbooks("Book1.xls")


2) "Book1.xls" 파일의 "Sheet1" 이라는 이름을 가진 워크시트를 참조
Dim myBook    As Workbook
Dim mySheet   As WorkSheet
Set myBook = Workbooks("Book1.xls")
Set mySheet = myBook.Sheets("Sheet1")
또는
Dim mySheet   As WorkSheet
Set mySheet = Workbooks("Book1.xls").Sheets("Sheet1")

3) " Book1.xls" 파일의 "Sheet1" 이라는 이름을 가진 워크시트의 "A1:A10" 영역을 참조
Dim myBook    As Workbook
Dim mySheet   As WorkSheet
Dim myRange   As Range
Set myBook = Workbooks("Book1.xls")
Set mySheet = myBook.Sheets("Sheet1")
Set myRange = mySheet.Range("A1:A10")
또는
Dim myRange   As Range
Set myRange = Workbooks("Book1.xls").Sheets("Sheet1").Range("A1:A10")


* On Error 문
1) On Error GoTo line
코드의 실행도중 오류가 발생하면 On_Error_Rtn 이라는 레이블이 있는 곳으로 이동

2) On Error Resume Next
코드의 실행도중 오류가 발생하면 오류를 무시하고 다음에 작성된 코드를 실행합니다.
 
3) On Error GoTo 0
모든 오류 처리를 중지하고 오류가 발생하면 디버그 창을 띄웁니다.
 


* 키워드 Option

1. Option Base 문
   배열을 선언할 때 시작하는 값을 변경할때 사용 (기본값은 0)
   Option Base 0 또는  Option Base 1

2. Option Compare 문
  - Option Compare Binary
  -
Option Compare Text     문자를 비교하는 방법에서 대소문자를 구분할 것인가 아닌가 결정
  - Option Compare Database 3. Option Expicit 문
   거의 반드시 사용함.
   모든 변수/상수는 반드시 명시적으로 선언되어야 한다. 그렇지 않으면 잘못된 변수/상수이다라는 의미
   참고) 이 문이 사용되었다면 VBA 가 자동으로 오류를 나타냅니다.

4. Option Private 문
   현재 프로젝트가 다른 프로젝트에서 참고하지 못하도록 합니다.

 

* 디스크에서의 작업과 관련된 문들

1. ChDrive 문  :   현재 드라이브를 변경합니다.
   Ex)   ChDrive "D" ' 현재 드라이브를 D: 드라이브로 변경합니다.
2. ChDir 문 :   현재 경로를 변경합니다.
   Ex)   ChDir "D:Temp" ' 현재 경로를 D:Temp 로 변경합니다.
   참고) ChDir 문으로 현재 경로를 변경할 수 있습니다.  반대로 현재의 경로를 알 수 도 있습니다.
         현재의 경로를 알려면 CurDir 함수를 이용합니다.
         Dim myPath As String
         myPath = CurDir("C") ' C: 드라이브에 설정되어 있는 현재 경로를 문자열로 반환합니다.
3. MkDir 문 :  새로운 경로를 생성합니다.
   Ex)   MkDir "D:Temp" ' D: 드라이브에 Temp 라는 이름의 경로를 생성합니다.

4. RmDir 문:   기존의 경로를 삭제합니다.
   Ex)   RmDir "D:Temp" ' D: 드라이브에 Temp 라는 이름의 경로를 삭제합니다.

   삭제하려는 경로에 파일이 존재하면 오류가 발생합니다.
   이러한 경우에는 Kill 문을 이용하여 먼저 해당 경로에 있는 모든 파일들을 완전히 삭제하세요.
5. Kill 문:    디스크에서 지정된 파일들을 삭제합니다.
   Kill 문은 여러 파일을 지정하는 다중 문자 와일드카드(*) 문자와 단일 문자 와일드카드(?)의 사용을 지원합니다.
   Ex)   Kill "D:*.xls"   ' D: 루트에 있는 파일들중 확장자가 xls 인 모든 파일을 삭제합니다.
           Kill "D:Tempa.xls"   ' D:Temp 폴더에서 a.xls 인 파일을 삭제합니다.
   참고) Kill 문은 열려있는 파일을 삭제하려할 경우에는 오류가 발생합니다.
6. Name 문 :   파일 또는 경로의 이름을 변경합니다.
   Ex)   Name "C:TestmyFile.xls" As "C:TestmyTestFile.xls"
           C:Test 폴더의 myFile.xls 파일을 myTestFile.xls 로 이름을 변경합니다.
           Name 문을 이용하면 다른 경로로 이동도 가능합니다.
   Ex)   Name "C:SourceFoldermyFile.xls" As "C:TargetFoldermyTestFile.xls"
          C:SourceFolder 폴더의 myFile.xls 파일을 C:TargetFolder 폴더로 이동하고 myTestFile.xls 로 이름을 변경합니다.

7. FileCopy 문:   파일을 복사합니다.
   Ex)   FileCopy "C:SourceFoldermyFile.xls" , "C:TargetFoldermyTestFile.xls"
           C:SourceFolder 폴더의 myFile.xls 파일을 C:TargetFolder 폴더에 myTestFile.xls 라는 이름으로 복사합니다.
   참고:열려있는 파일을 복사하면 오류가 발생합니다.
   열려있는 파일을 복사하려면 API 를 이용하여 복사할 수 있습니다. 방법은 팁 게시판의 열려있는 파일의 복사를 참고.

제어문

*반복문

1. Do ... Loop 문   : 조건에 만족할때까지 실행(실행할 횟수가 명확히 정해지지 않은 경우)

Do [{While | Until} 조건]
    [statements]
    [Exit Do]
    [statements]
Loop

또는 다음과 같은 구문을 사용할 수도 있습니다.

Do
    [statements]
    [Exit Do]
    [statements]
Loop [{While | Until} 조건]

2. For ... Next 문 : 이미 실행할 횟수가 정해져 있을 때

For counter= start To end [Step step]
    [statements]
    [Exit For]
    [statements]
Next [counter]


3. For Each ... Next 문  : 배열이나 컬렉션의 각 요소들에 대한 문의 그룹을 반복

For Each element In group
    [statements]
    [Exit For]
    [statements]
Next [element]


4. While ... Wend 문


* 조건문, 분기처리문

1. IF 문


2. SELECT CASE 문

Select Case testexpression
    [Case expressionlist-n
        [statements-n]] ...
    [Case Else
        [elsestatements]]
End Selec


3. ON...GOSUB 문


4. ON...GOTO 문


5. GOSUB ... RETURN 문


6. GOTO 문

<cf. 분기문과 비슷한 효과를 내는 함수>

1. IIF 함수


2. SWITCH 함수


3. CHOOSE 함수


* 개체를 위한 특수 명령문

1. For each문

2. with 문


프로시저

2. 프로시저 작성 방법
1) Sub 문
2) Function 문

*Procedure : Sub Procedure  : 일반적인 처리 
                   Function Procedure: 함수.  어떠한 값을 입력하면 계산을 통하여 결과를 출력.
                   Property Procedure: 사용자가 속성을 만들거나 저장 ( 일반적으로 잘 사용안됨)

*사용자 정의 폼

1. 해당 문서 (마우스 오른클릭)>  삽입 > 사용자 정의 폼   or     메뉴의 삽입 > 사용자 정의 폼
2. 폼과 도구 상자가 나타남.


 

함수

* 날짜 시간함수

1. Now 함수 : 현재 시스템의 날짜와 시간을 반환합니다.
2. Date 함수 : 현재 시스템의 날짜를 반환합니다.워크시트 함수의 Today 와 같습니다.

Sub Date_Time_Ex()
      Dim Date_Time As Date
      Date_Time = Now
      MsgBox "년 : " & Year(Date_Time) & vbCr & _
                   "월 : " & Month(Date_Time) & vbCr & _
                   "일 : " & Day(Date_Time) & vbCr & _
                   "시 : " & Hour(Date_Time) & vbCr & _
                   "분 : " & Minute(Date_Time) & vbCr & _
                   "초 : " & Second(Date_Time)
      End Sub

DateValue 함수
TimeValue 함수
Weekday 함수
MonthName 함수
WeekdayName 함수

DateSerial 함수: 지정된 년, 월, 일의 날짜 값을 반환합니다.
TimeSerial 함수 특정 시, 분, 초에 대한 시간을 나타내는 Variant (Date) 값을 반환 DateAdd 함수  :  특정 시간 간격을 더한 날짜 값을 반환 DateDiff 함수  : 두 날짜 사이의 시간 간격을 계산합니다. 결과는 Long 형식입니다
DatePart 함수  :주어진 날짜의 지정된 부분을 포함하는 Variant(Integer) 값을 반환

* 수학함수

1. Abs 함수 : 수의 절대값을 구합니다.
2. Int 함수 : 수를 가까운 정수로 내립니다.  (음수인 경우에는 더 작은 숫자로 환산됨을 주의 ) 3. Fix 함수 : 숫자의 소수점 이하를 버리고 정수로 변환합니다.(TRUNC 함수와 동일)
4. Rnd 함수: 0보다 크거나 같고 1보다 작은 수의 난수를 발생. (RAND 함수와 동일)
5. Sgn 함수 : 숫자의 부호를 반환합니다.(음수이면 -1, 0 은 0을 양수이면 1을 반환합니다)

- 삼각 함수  Cos 함수 /  Sin 함수 /  Tan 함수
- 기타 함수  Exp 함수 / Log 함수 /  Sqr 함수


*String관련함수

InStr 함수:  한 문자열 안에 특정 문자열이 처음으로 나타난 위치를 지정하는 Variant(Long) 값을 반환
                  ex) InStr("ABC", "B")   ---> 2

Mid 함수: 한 문자열에서 지정된 수의 문자를 포함하는 Variant(String) 값을 반환합니다.
Left 함수: 문자열 왼쪽부터 지정된 수 만큼의 문자를 포함하는 Variant(String) 값을 반환합니다.
Right 함수: 문자열의 오른쪽으로부터 지정된 수의 문자를 포함하는 Variant(String) 값을 반환합니다.

VBA 프로그래밍하는 순서

① 마우스로 원하는 윈도우를 그린다. (콘트롤 작성)
② 버튼, 텍스트 박스등의 속성을 지정한다. (속성 지정)
③ 연계된 사건(Event)에 대한 코드를 작성한다. (코딩)

  •  

    ------------------------------------------------------------

    참조

    김형백  http://soongin.new21.net/
    허성덕  http://uno21.com/
    엑사모  http://www.excellove.com
    i엑셀러 http://www.iexceller.com/

  • 반응형

    'Tech > Office' 카테고리의 다른 글

    추가 기능 파일(xla)  (0) 2012.11.11
    불규칙한 크기로 병합된 셀들에 연번호 매기기  (0) 2012.05.11
    Exceller  (0) 2012.01.02
    다중조건-Vlookup,Match,Index,Sumproduct  (0) 2009.06.19
    INDEX와 INDIRECT의 비교  (1) 2009.05.30
    찾기 함수 MATCH() INDEX() OFFSET()  (1) 2009.05.30