>> VBA 개체 Method ( 함수 ) Copyright 2018 by 오빠두 0
1. VBA 에서 Method( 함수 ) 란무엇인가? VBA 기초강의잘따라오고계시나요? 이전강의까지개체 (Object) 를자동차에, 속성 (Property) 을자동차의속성에비유하였습니다. 그럼함수 (Method) 는무엇일까요? 개체 (Object:= 자동차 ) 가무엇인지속성 (Property) 을통해서표현했다면, 함수 (Method) 는자동차의동작이라고표현할수있습니다. 아래에 Method 의몇가지예제를보겠습니다. 1. 시동걸기 (Activate) 2. 문열기 (Open) 3. 문닫기 (Close) 4. 움직이기 (Run) 5. 부품정비 (Find)... 즉개체 / 속성 / 함수는하나의묶음이며아래와같이명사 / 형용사 / 동사로비유할수있습니다. 우리가 일상생활에서명사만가지고의사소통을할수없으므로형용사와동사를보태서사용하듯, 개체의 Peoperty 와 Method 는개체를보조하여동작합니다. 개체 (Object) : 자동차 = 명사 (Noun) 속성 (Property) : 속성 = 형용사 (Adjective) 함수 (Method) : 동작 = 동사 (Verb) 2. Method 에는인수 (Argument 또는 Parameter) 가붙습니다. 엑셀워크시트에서자주사용하는 VLOOKUP 함수를보겠습니다. = VLOOKUP(lookup_value, table_array, col_index_num, [range_lookup]) // 엑셀워크시트에서사용되는모든함수에는인수 (Parameter) 가따라붙습니다. // 인수에는필수인수 ( 반드시입력해야하는값 ) 이있고선택인수 ( 선택적으로입력할수있는값, 기본값이정해져있음 ) 이있습니다. VBA 에서사용하는함수 (Method) 에서도인수를사용합니다. 하지만몇몇함수는인수없이동작합니다. = 자동차.Run = 자동차.Activate 등.. // 몇몇함수는인수없이간단하게입력합니다. Copyright 2018 by 오빠두 1
= 자동차.DoorClose ( 문의 _ 위치, [ 자동잠금 ]) // 하지만많은함수는워크시트에서사용하는함수처럼인수를포함합니다. 3. 같지만다른 Method( 함수 ) 몇몇 Method( 함수 ) 는같은이름은갖지만, 어떠한개체 (Object) 아래에서사용되는가에따라다른동작을 하거나다른인수를가질수있습니다. 아래 2 가지예제를같이보겠습니다. 3-A. Delete 함수 A-1. Worksheet 개체의 Delete (WS.Delete) : 인수 (Argument) 가붙지않습니다. : Delete 동작실행전 Dialog Box 가실행됩니다. ( 따라서일반적으로 Worksheet 의 Delete 를실행하기전 Application.DisplayAlerts 를 False 로바꿔줌으로써알림창실행으로인해실행이중단되는것을방지합니다.) A-2. Range 개체의 Delete (Rng.Delete) : 추가로인수 (Argumet) 가붙습니다. Range 개체의 Delete 함수는밀기방향이인수로 입력됩니다. Copyright 2018 by 오빠두 2
3-B. Copy 함수 B-1. Worksheet 개체의 Copy (WS.Copy) : 붙여넣기할위치 ( 워크시트 ) 가인수로입력됩니다. : Before / After 중둘중하나만인수로입력할수있습니다. B-2. Range 개체의 Copy (Rng.Copy) : 붙여넣기할위치 ( 범위 ) 가인수로입력됩니다. 4. Method 입력방법 VBA 에서 Method( 함수 ) 를입력하는데 2 가지방법이있습니다. 각각의방법을살펴보겠습니다. 4-A. 순서에맞춰콤마 (,) 로나눠입력하는방법 : 엑셀워크시트의함수입력방식과똑같습니다. : 입력하는인수의종류가적을경우두번째방법보다훨씬간단하게작성할수있습니다. : 필수인수 ( 대괄호 [] 에들어있지않은인수 ) 는콤마로입력을건너뛸수없습니다. Sub Test() Dim WS As Worksheet Dim Rng As Range Set WS = ThisWorkbook.Worksheets("Sheet1") Set Rng = WS.Range("A1") Rng.PasteSpecial,,, True // 콤마로모든선택인수는건너뛰고필요한인수값만입력합니다. WS.SaveAs " 파일이름 ",, "abc" End Sub Copyright 2018 by 오빠두 3
4-B. 인수 (Argument) 를직접지정해서입력하는방법 : 입력해야할인수의종류가많은경우, 원하는인수를직접지정해서입력할수있습니다. : 첫번째방법보다사용자가더욱이해하기쉬운코딩이가능한반면, 직접인수값을지정해줘야하므로코드를작성하는데더많은시간이소요됩니다. : 인수이름을적은뒤, 콜론과등호 (:=) 로구분합니다. Sub Test() Dim WS As Worksheet Dim Rng As Range Set WS = ThisWorkbook.Worksheets("Sheet1") Set Rng = WS.Range("A1") Rng.PasteSpecial Transpose:=True WS.SaveAs Filename:=" 파일이름 ", Password:="abc" // 작성해야할인수가많을경우, 원하는인수만직접지정하여입력하는것이훨씬간결하고편리할때가있습니다. End Sub 5. Method 검색방법다양한방법이있겠지만저는주로 3 가지방법을사용합니다. 1. VBA 편집기에서키보드 F2 키를눌러라이브러리창을불러옵니다. 원하는개체또는클래스를검색하면해당항목에대한모든 Property 및 Method 그리고 Event 에대해확인할수있습니다. 2. 엑셀에서 Macro Recording ( 매크로녹화기능 ) 을활용합니다. 매크로녹화기능을통해코드를작성하게되면모든행동하나하나가상당히자세하게기록됩니다. 따라서매크로녹화기능을통해작성된코드를분석하면원하는행동에대한 Key Property 또는 Method 를쉽게확인할수있습니다. 개발자툴 (Developer) 를활성화하는방법은여기를참고하세요. 3. StackOverFlow 와같은프로그래밍언어커뮤니티를잘활용하면, 때로는생각했던것이상의 결과물을얻을수도있습니다. Copyright 2018 by 오빠두 4
6. 예제코드전문 Sub Test() Dim WS As Worksheet Dim Rng As Range Dim PasteRng As Range Set WS = ThisWorkbook.Worksheets("Sheet1") Set Rng = Application.InputBox(" 범위를선택하세요 ", Type:=8) Rng.Copy WS.Range("C1").PasteSpecial xlpasteall,,, True WS.Range("C2").PasteSpecial Paste:=xlPasteValues, Transpose:=True WS.UsedRange.Columns.AutoFit End Sub Copyright 2018 by 오빠두 5