분류 전체보기 228

[VBA] ParamArray

Function 또는 Sub를 구현하다 보면, Parameter를 여러 개 받아와야 하는 경우가 있습니다. 이 중, parameter의 개수가 계속 변할 수 있는 상황이 존재할 수도 있죠. 가장 대표적인 예시가 정수의 덧셈을 구현하는 경우입니다. Sum(2,1)처럼 두 수를 받아와서 덧셈을 수행하는 경우도 있겠지만 Sum(1,2,3,4)처럼 여러 수의 덧셈 역시 가능하도록 구현을 하고 싶을 수 있겠죠. 이럴 때 사용할 수 있는 것이 ParamArray입니다. ParamArray는 위의 예시와 같이 여러 parameter를 받아오고 싶지만, 그 개수를 특정하고 싶지는 않을 때 사용할 수 있습니다. 사용법은 Parameter를 정의할 때 앞에 ParamArray를 붙여주면 되고, 항상 배열의 형태를 가진 V..

[VBA] IIf Function

VBA가 제공하는 함수 중에 IIf 함수가 존재합니다. IIf는 생긴 것처럼 If 문과 비슷한 역할을 합니다. If문과 IIf 문의 가장 큰 차이점은 Return Value를 개발자가 설정할 수 있다는 점입니다. If문은 단지 조건이 참인지 거짓인지를 판별하기만 한다면, IIf문은 참일 경우 참에 해당하는 값을, 거짓일 경우 거짓에 해당하는 값을 반환합니다. 여기서 참 또는 거짓일 경우 반환할 값은 개발자가 지정할 수 있습니다. IIf 문의 기본적인 문법은 다음과 같습니다. IIf (expr, truepart, falsepart) expr: 참과 거짓을 판별할 표현식 truepart: expr이 참일 경우 반환할 값 또는 표현식 falsepart: expr이 거짓일 경우 반환할 값 또는 표현식 예시를 살..

[VBA] Error Handling

개발을 하다 보면 필연적으로 마주할 수밖에 없는 문제 중 하나가 Error죠. VBA에서는 Error와 마주쳤을 때 대응할 수 있는 경우의 수가 두 가지 있습니다. 1. Error를 무시하고 계속해서 진행한다. 2. 별도 구현된 Error Handling Section으로 이동한다. 각 경우에 대해 어떻게 구현할 수 있는지 알아보도록 하겠습니다. 1. Error를 무시하고 계속해서 진행한다. 기본적으로 다음의 코드를 통해 Error를 무시하고 진행할 수 있습니다. 해당 구문 다음에 오는 코드는 Error가 발생하더라도 프로그램이 종료되지 않고 다음 코드로 넘어가게 됩니다. On Error Resume Next 예시를 한 번 들어보겠습니다. 가장 쉽게 발생시킬 수 있는 에러가 정수를 0으로 나누는 것이죠...

[VBA] MsgBox 사용법

VBA를 이용해 개발을 하다 보면 원하는 메시지를 출력하고, 또 사용자의 선택을 받아오기 위해 MsgBox를 자주 사용하게 됩니다. 오늘은 이 MsgBox에 대해 알아보겠습니다. 사용법 MsgBox는 VBA에서 기본적으로 제공하는 함수로, 사용법은 다음과 같습니다. MsgBox(prompt, [, buttons] [, title] [, helpfile, context]) Parameter로 사용하는 값들 중 필수적으로 입력해야 할 요소는 prompt 밖에 없으며, 나머지는 모두 옵션입니다. prompt: MsgBox에 띄울 메시지 문자열 (필수 값) buttons: MsgBox에 표시할 버튼과 아이콘 title: MsgBox 창에 표시할 제목 helpfile: 도움말 context: 도움말 파일의 con..

[VBA] Optional Arguments

VBA에서는 Optional Arguments를 사용할 수 있습니다. Optional Arguments란 Sub 또는 Function을 호출할 때 특정 Argument를 보낼 수도, 보내지 않을 수도 있게 구현하는 것을 말합니다. 예시를 들어보겠습니다. Sub Order(menu As String, Optional num As Integer) If IsMissing(num) Then num = 1 End If MsgBox "Menu: " & menu & " Num: " & num End Sub 주문한 음식을 출력하는 코드입니다. Parameter로 Menu의 이름을 String으로, 수량을 Integer 값으로 Optional 하게 받아옵니다. 혹시 Optional 한 값인 num이 비어있다면, IsMi..

[VBA] Do While과 Do Until

VBA에서 지원하는 여러 반복문 중에 Do While문과 Do Until문이 존재합니다. 둘 다 For문이나 While문에 밀려 잘 사용되지는 않지만 그 차이를 알아보겠습니다. Do While은 뒤에 따라오는 조건에 부합하는 경우 계속 반복을 수행합니다. 그리고 Do Until은 뒤따라오는 조건이 부합할 때까지 반복을 수행합니다. 말이 조금 모호한데 예시를 들어 자세히 알아보겠습니다. Sub Do_While_Example() Dim count As Integer Do While count < 5 Debug.Print count count = count + 1 Loop End Sub 간단한 Do While문 예시입니다. count라는 변수가 5보다 작은 경우 1씩 증가시켜주는 코드이죠. Debug.Prin..

[VBA] Select Case Construct (Switch문)

VBA에서는 다른 언어에서 Switch를 이용해 여러 조건을 동시에 필터링하는 기능을 Select Case 문을 이용해 사용할 수 있습니다. 기본 문법 Sub Select_Case_Example() Dim Num As Integer Num = Rnd() Mod 10 '0~9 랜덤 값 생성 Select Case Num Case Num < 5 MsgBox "Num is Smaller Than 5" Case Num = 5 MsgBox "Num is 5" Case Else MsgBox "Num is Bigger Than 5" End Select End Sub 기본적으로 Select Case {Expression}과 End Select 사이에 원하는 조건들을 Case 뒤에 삽입하는 방식으로 구현이 이루어집니다. ..

[VBA] User-Defined Data Types (사용자 정의 데이터 타입)

C 언어에서 사용하는 구조체와 같은 형태의 Data Type을 VBA에서도 사용할 수 있습니다. 선언 Type Student name As String age As Integer grade As Integer is_graduated As Boolean End Type 저는 Student라는 이름의 사용자 정의 데이터 타입을 선언해 보았습니다. Module 내에서만 선언이 가능하며, Module의 최상단에 선언해주시면 됩니다. Type 뒤에 원하는 데이터 타입 명을 입력해주고, Type과 End Type 사이에 사용하고자 하는 데이터들을 작성해주면 됩니다. 변수로 사용 Type Student name As String age As Integer grade As Integer is_graduated As B..

[VBA] 배열(Array) 사용하기

1차원 배열 배열 선언 Dim MyArray(0 To 9) As Integer Dim MyArray(9) As Integer 위의 두 코드 중 어떤 방식을 선택하든, 0으로 초기화된 크기 10의 일차원 배열을 선언할 수 있습니다. 배열 값 사용 Debug.Print (MyArray(0)) 위의 코드와 같이 선언한 배열 이름 우측에 괄호를 열고 인덱스 값을 작성하는 것으로 해당 값을 사용할 수 있습니다. N차원 배열 배열 선언 '2차원 배열 Dim MyArray2D(0 To 9, 0 To 9) As Integer '3차원 배열 Dim MyArray3D(0 To 9, 0 To 9, 0 To 9) As Integer N차원 배열의 선언 역시 1차원 배열과 같은 방식을 사용합니다. 괄호 안에 범위를 계속 추가해..

[VBA] Comment Object 삽입

VBA를 활용해 셀에 Comment를 삽입할 수 있습니다. Sub Add_Comment() Dim sht As Worksheet Set sht = Sheet6 sht.Range("A1").AddComment ("This is Comment") End Sub 참고로 이미 셀 내에 Comment가 존재하는 경우 AddComment를 실행하면 오류가 발생하게 됩니다. 이미 Comment가 존재하는지를 확인한 뒤, 존재하는 Comment가 없을 경우에만 Comment를 작성하고 싶다면 아래와 같이 코드를 작성해주면 됩니다. Sub Add_Comment() Dim sht As Worksheet Set sht = Sheet6 If sht.Range("A1").comment Is Nothing Then sht.Ran..