1. Visual BASIC 기본 문법 1. 변수 변수란 프로그램이 실행되고 있는 동안 갱신될 수 있는 자료를 저장하는 장소에 이름을 붙인 것이다. 비주얼 베이직에서는 변수의 선언을 Dim이라는 명령을 사용하여 처리한다. 변수 선언의 방법을 설명하기 이전에 먼저 알아두어야 할 점이 있다. 비주얼 베이직에서는 변수를 선언하지 않고도 변수를 사용할 수 있다는 점이다. 만약 비주얼베이직에서 변수를 선언하지 않고 사용한다면 그 변수의 데이터형은 Variant가 된다. 그러나 변수를 선언하지 않고 사용하는 것은 프로그램의 논리적 버그를 초래한다. 그러므로 프로그램의 선두 부분에 다음과 같은 지시자를 사용하여 선언되지 않은 변수는 사용하지 못하게 하는 것이 바람직하다.
비주얼 베이직 5.0 이후부터는 변수, 함수, 컨트롤 이름, 그리고 컨트롤 제작 시 이벤트까지 한글로 가능하다. 다음은 한글 변수로 선언된 예이다.
Option Explicit Dim 주소 as String Dim 번호 as integer · ·
|
변수란 프로그램 실행 중 수정될 수 있는 데이터를 포함할 수 있는 명명된 저장 위치를 의미한다. 각 변수는 그것의 범위 안에서 유일하게 식별하는 이름을 가진다. 데이터 형식은 지정될 수도 있고 안될 수 있다. 변수 이름은 문자로 시작해야 하고, 같은 범위 안에서 유일해야 하며, 255문자보다 적어야 되며, 포함 구간이나 형식 선언 문자를 포함할 수 없다. 아래는 변수의 선언과 구현의 예를 보여준다.
Dim Space As Integer Space = 10
|
Space는 변수명이고 Integer는 데이터 형식이다. 비주얼 베이직에서는 "="을 대입 연산자의 의미와 등위 연산자(동등 비교)의 의미를 동일하게 가지고 있다. 즉, 변수에 값을 대입할 때에는 대입 연산자의 의미로, 조건절에 쓰일 때는 같다는 등위 연산자로 사용된다. 위에서는 Space라는 변수에 10을 대입하라는 의미이다. 대입 연산자를 중심으로 좌에 오는 값을 lvalue, 우에 오는 값을 rvalue라고 하는데 lvalue는 저장 공간을 가지는 변수이고 rvalue는 상수 또는 계산 후 값이 되는 것을 사용할 수 있다. 여기서 데이터형을 사용하는 대신 데이터형을 나타내는 하나의 문자, 즉 형식선언 문자를 사용할 수도 있다. 변수를 선언하는 두 가지 예는 다음과 같다.
Dim A as Integer(Dim A%) Dim B as String(Dim B$)
|
변수 선언은 다음 규칙을 따라야한다. ·변수 이름은 255자 이상 사용할 수 없다. ·변수 이름을 사용할 수 있는 문자는 한글, 영문자, 숫자, 밑줄(_)이다. ·특수 기호는 사용할 수 없다. ·변수 이름의 첫 번째 문자는 반드시 영문자나 한글만 사용해야 한다. ·변수 이름은 비주얼 베이직에서 사용하는 예약어를 사용할 수 없다. ·메소드, 함수, 속성과 동일한 변수명을 사용하지 않는 것이 좋다. 다음은 올바른 변수 선언과 올바르지 않은 변수 선언에 대한 예이다.
Dim 국어 As Integer Dim My_Str As String Dim a88 As Long Dim Eng As Single
| (옳은 예)
|
Dim a* As Integer Dim 2abc As String Dim Integer As Long Dim Park DH As Currency
| (옳지 않은 예
|
가. 기본적인 데이터 형 비주얼 베이직에서는 다양한 형태의 데이터형을 제공한다. 그러나 모든 데이터형을 알 필요는 없다. 그러나 기본적으로 반드시 알아야 하는 데이터형인 1 바이트의 메모리를 할당하는 Byte와 진리값을 저장하는 Boolean, 그리고 정수값을 저장하는 Integer와 문자열을 저장하는 String 값 정도는 알아야 한다 다음은 기본적인 데이터형에 대해서 요약해 놓은 것이다.
데이터 형 식
| 저장 용량
| 형식 선언 문자
| 범 위
| Byte
| 1바이트
| 없음
| 0 ∼ 255까지
| Boolean
| 2바이트
| 없음
| True 또는 False
| Integer
| 2바이트
| %
| -32,768 ∼ 32,767까지
| Long
| 4바이트
| &
| -2,147,483,648 ∼ 2,147,483,647까지
| Single
| 4바이트
| !
| (음수값) : -3.402823E38 ∼ -1.401298E-45 (양수값) : 1.401298E-45 ∼ 3.402823E38
| Double
| 8바이트
| #
| (음수값) : -1.79769313486232E308 ∼ -4.94065645841247E-324 (양수값) : 4.94065645841247E-324 ∼ 1.79769313486232E308
| Currency
| 8바이트
| 없음
| -922,337,203,685,477.5808 ∼ 922,337,203,685,477.5807
| Date
| 8바이트
| 없음
| 100년 1월 1일 ∼ 9999년 10월 31일
| Object
| 4바이트
| 없음
| 모든 개체 참조
| String
| 10바이트+ 문자열 길이
| $
| 0 ∼ 약 2조
| Variant (숫자)
| 16바이트
| 없음
| Double형 범위 내의 모든 숫자
| Variant (문자)
| 22바이트+ 문자열 길이
| 없음
| 변수-길이 String과 같은 범위
|
나. 사용자 정의형 (Type 형) 어떠한 언어에서나 기본적인 데이터형만으로 프로그램을 하는 경우는 드물다(정확히 말해서 거의 불가능하다). C/C++에서 Struct 지시자를 사용하는 것과 마찬가지로 베이직과 파스칼에서는 Type 지시자를 사용하여 사용자 정의 데이터형을 선언할 수 있다. 사용자 정의 데이터형은 간단히 말해서 사용자가 필요한 크기의 데이터 형태를 정의하는 것을 말한다. Type 지시자의 사용법은 다음과 같다.
[Private | Public] Type 사용자 정의형 이름 .. 구성 요소 as 데이터형 .. End Type
|
사용자 정의형 데이터를 모듈에서 선언했다면 비주얼 베이직의 어디에서나 변수를 사용하는 방법과 마찬가지로 사용할 수 있다. 그러면 한 가지 예로 회원 관리를 위해 다음과 같은 사용자 정의형 변수를 선언했다고 가정하자.
Type 소프트동호회원 ID As String * 8 이름 As String * 20 주소 As String * 30 나이 As Integer 가입날짜 As Date End Type
|
한 가지 참고해야 할 것은 Type 지시자는 모듈에서 선언해야 한다는 것이다. 다른 곳에서 선언하면 제대로 사용할 수 없다. 소프트동호회원형 변수의 각 구성 요소를 제어하고자 한다면 비주얼 베이직에서 친숙하게 만날 수 있는 도트 연산자를 사용하면 된다.
Sub CreateRecord() Dim 기존회원 As 소프트동호회원 기존회원.ID = "crack90" 기존회원.이름 = "박성완" 기존회원.나이 = 28 End Sub
|
2. 상수 비주얼 베이직에서 상수를 선언할 경우에는 Const 지시자를 사용한다. 먼저 Const 지시자를 사용하는 방법을 알아보기 전에 상수에 대한 정의를 살펴보기로 하자. 상수는 값에 대한 매크로라고 할 수 있다. 즉, 특정값(수, 문자, 문자열)을 다른 이름으로 치환하여 사용하는 것을 말한다. 비주얼 베이직에서 상수를 정의하는 방법은 다음과 같다.
[public|private] Const 상수명 [As 데이터형] = 값
|
[public|private]은 제한자로써 선택적인 사항으로써 써도 좋고 안써도 좋다. 다만 쓰지 않을 경우에는 디폴트로 private이 된다. 그리고 상수는 [As 데이터형]을 사용하여 데이터형을 가질 수 있다. 이것 역시 선택 사항이다. 여기서 상수명 작성 규칙은 변수명 작성 규칙과 동일하다. 상수를 정의한 예는 다음과 같다.
Const Max = 300 Public Const Size As Integer = 100 Public Const Address = "Seoul"
|
함 수
| 설 명
| CByte
| Byte 형으로 변환한다.
| CInt
| Integer 형으로 변환한다.
| CLng
| Long 형으로 변환한다.
| CSng
| Single 형으로 변환한다.
| CDbl
| Double 형으로 변환한다.
| CCur
| 통화를 나타낼 때 사용하는 Currency 형으로 변환한다.
| CDate
| Date 형으로 변환한다.
| CDec
| Decimal 형으로 변환한다.
| CVar
| Variants 형으로 변환한다.
| CStr
| String 형으로 변환한다.
| CBool
| Boolean 형으로 변환한다.
|
함 수
| 함 수 값
| 예 / 비고
| Int(x) Fix(x) Abs(X)
| x를 넘지 않는 최대 정수 x의 정수 부분 x의 절대값
| Int(3.14) => 3 Fix(-3.14) => -3
| Sqr(x) Hex(x) Sgn(X) Rnd
| x의 제곱근 x의 16진수 값(문자열) x가 양수이면 1, 음수이면 -1, 0 이면 0 0~0.9999...사이의 난수
| Sqr(2) => 1.414 Hex(254) => FE Sgn(-10) => -1
| Sin(x) Cos(x) Tan(X)
| x의 사인값 x의 코사인값 x의 탄젠트값
| x는 각도가 아닌 라디안 단위 라디안 = (각도/180) * π
| Exp(x) Log(x)
| e의 x승값 log x값
| Exp(1) => 2.718 Log(2.718) => 0.999
|
함 수
| 함 수 값
| LCase(문자열) UCase(문자열)
| 문자열의 영어 대문자를 모두 소문자로 바꾼 값 문자열의 영어 소문자를 모두 대문자로 바꾼 값
| Left(문자열, n) Right(문자열, n) Mid(문자열, m, n)
| 문자열의 왼쪽 n문자(바이트) 문자열의 오른쪽 n문자 문자열의 m번째 이후 n문자. n을 생략하면 m번째이후 모든 문자
| LTrim(문자열) RTrim(문자열) Trim(문자열)
| 문자열의 왼쪽의 공란을 잘라 없앤 값 문자열의 오른쪽의 공란을 잘라 없앤 값 문자열의 왼쪽과 오른쪽의 공란을 잘라 없앤 값
| Len(문자열) InStr ([n,] 문자열1, 문자열2)
| 문자열의 길이(바이트수) 문자열의 n번째 문자 이후에 [문자열2]가 포함되어 있는 위치, 포함되어 있지 않으면 0
|
1) Mid( ) Mid(str1, n [,l]) = str2 기능 : str1의 n번째 이후 l문자를 str2(의 처음 n문자)로 바꾼다. l을 생략하면 n번째 이후의 [str2의 길이] 만큼의 문자열이 str2로 바뀐다. 2) InStr( ) 함수 InStr([n,] 문자열1, 문자열2)는 [문자열1] 중에 [문자열2]가 포함되어 있는 위치를 구한다. 포함되어 있지 않으면 0을 구하며, n을 지정하면 n번째 문자(바이트)부터 조사를 시작한다. 한글/한자는 1자가 2바이트이다. 라. 대화 상자 1) MsgBox 함수 MsgBox는 윈도우의 메시지 다이얼로그를 표시하는 함수이다. 함수를 호출하면 대화 상자 안에 메시지를 보여주며, 사용자가 단추를 누를 때까지 기다리다가 사용자가 누른 단추에 해당하는 값을 리턴한다.
MsgBox( 문자열[, 버튼 상수] [, 타이틀 문자열] [, 헬프 파일, context])
|
다른 것들은 생략이 가능하지만 표시하고자 하는 문자열은 반드시 적어 주어야 한다. 만약 이 문자열이 2줄 이상이라면, CR(Carriage Return) 문자인 Chr(13)과 LF(Line Feed) 문자인 Chr(10)를 이용해 구분해야 한다. 문자열을 합치는 연산자가 '&'이기 때문에 'Chr(13) & Chr(10)'가 두 문자열 사이에 더해져야 한다. Chr() 함수는 인자로 준 아스키 코드에 대한 아스키 문자를 리턴해 주는 함수이다.
종류
| 상 수
| 값
| 설 명
| 버튼 모양
| vbOKOnly
| 0
| [확인] 버튼
| vbOKCancel
| 1
| [확인], [취소] 버튼
| vbAbortRetryIgnore
| 2
| [중단], [재시도], [무시] 버튼
| vbYesNoCance
| 3
| [예], [아니오], [취소] 버튼
| vbYesNo
| 4
| [예], [아니오] 버튼
| vbRetryCancel
| 5
| [재시도], [취소] 버튼
| 아이콘 모양
| vbCritical
| 16
| [중대 메시지] 아이콘
| vbQuestion
| 32
| [질의 경고] 아이콘
| vbExclamation
| 48
| [메시지 경고] 아이콘
| vbInformation
| 64
| [메시지 정보] 아이콘
| 기본 버튼
| vbDefaultButton1
| 0
| 첫째 버튼을 기본값으로
| vbDefaultButton2
| 256
| 둘째 버튼을 기본값으로
| vbDefaultButton3
| 512
| 셋째 버튼을 기본값으로
| vbDefaultButton4
| 768
| 넷째 버튼을 기본값으로
| 모달 속성
| vbApplicationModal
| 0
| 응용 프로그램에 대한 모달 속성 적용
| vbSystemModal
| 4096
| 시스템에 대한 모달 속성 적용
| 기타
| vbMsgBoxHelpButton
| 16384
| 메시지 박스에 [도움말] 버튼 추가
| vbMsgBoxSetForeground
| 65536
| 메시지 박스 창을 전경 창으로 지정
| vbMsgBoxRight
| 524288
| 문자열을 오른쪽으로 정렬
| vbMsgBoxRtlReading
| 1048576
| 문자열을 위에서 아래로, 오른쪽에서 왼쪽으로 읽을 수 있도록 지정
|
타이틀은 다이얼로그 박스의 캡션 바에 나타나는 문자열이다. 만약 타이틀을 생략하면 응용 프로그램의 이름이 대신 나타난다. 만약 다이얼로그 박스에서의 선택이 중대한 의미를 가지며, 또한 그에 대한 부가적인 설명이 필요하다고 생각되면 다이얼로그 박스 상에서 관련 도움말을 볼 수도 있다. 헬프 파일을 지정하면 바로 이것이 가능해진다. 만약 헬프 파일명이 지정되면 context도 반드시 부여되어야 한다. context는 헬프 파일의 각 항목에 부여된 도움말 문 번호를 말한다. MsgBox 함수의 리턴값은 어떤 버튼을 눌렀느냐에 따라 결정된다. 아래 리턴값들이 설명되어 있다.
상 수
| 값
| 설 명
| vbOK
| 1
| [확인] 버튼
| vbCancel
| 2
| [취소] 버튼
| vbAbort
| 3
| [중단] 버튼
| vbRetry
| 4
| [재시도] 버튼
| vbIgnore
| 5
| [무시] 버튼
| vbYes
| 6
| [예] 버튼
| vbNo
| 7
| [아니오] 버튼
|
InputBox는 MsgBox와 더불어 사용자와 상호 작용하는 가장 기본적인 함수이다. InputBox는 MsgBox처럼 예, 아니오 등으로 나타낼 수 있는 간단한 정보가 아닌, 좀 더 구체적인 정보를 사용자로부터 얻어낼 때 사용된다. InputBox를 사용하게 되면 화면에 InputBox 폼이 뜨게 되며, 사용자가 입력한 값은 String으로 처리된다. 문법 svarname=InputBox(Prompt [,title][,default][,xpos][,ypos][,helpfile,context] 예제 Dim RetName As String RetName = InputBox("원하는 값을 입력하시오", "이름 입력", 1000, 1000) Prompt는 역시 사용자에게 보여지는 문장이며, title은 폼의 캡션, 그리고 default는 입력받을 초기 값이다. Xpos와 Ypos는 폼의 왼쪽 상단 위치를 지정하는 것이고, 생략하면 화면의 한가운데 나타나게 된다. 위의 예제는 앞쪽의 그림으로 나타나 있다. 4. 배열 비주얼 베이직에서는 크게 동적 배열과 정적 배열로 배열을 선언할 수 있다. 먼저 배열에 대한 정의를 내리면 일정 데이터형을 저장할 수 있는 변수 모임의 주소라고 할 수 있다. 즉 byte형의 변수를 10개 이상 저장할 필요가 있다면 byte 형 변수를 10개의 인덱스를 주고 선언하면 된다. 배열을 선언하는 방법은 변수를 선언하는 방법과 동일하다. 다만 배열명에는 ()와 같은 괄호가 덧붙여져 있다는 것만이 다르다.
여기서 첨자가 하나만 있는 것을 1차원 배열이라 하고 첨자가 여러 개 있는 것을 다차원 배열이라 한다. 대표적인 다차원 배열에는 첨자가 2개 있는 2차원 배열이 있다. 정적 배열은 말이 의미하는 것처럼 배열이 정적인 것을 말한다. 즉 배열의 크기가 고정되어 있는 경우를 말한다. 일반적으로 배열을 선언할 경우 ()안에 배열의 범위나 크기를 설정하는 경우가 있다. 이럴 경우 메모리에는 ()안의 범위나 크기만큼 배열이 차지하게 된다. 다음은 여러 가지 배열을 선언한 예이다.
Dim DayArray(50) '배열 크기 Dim Matrix(3, 4) As Integer '2차원 배열 Dim MyMatrix(1 To 5, 4 To 9, 3 To 5) As Double '3차원 배열 Dim BirthDay(1 To 10) As Date '배열 범위
|
일반적으로 배열의 범위를 지정하지 않고 크기만을 지정한 경우는 인덱스가 0으로 설정되어 있다. 그러나 Option Base 명령을 사용하여 인덱스를 수정할 수 있다. Option Base 명령은 소스 내에서 배열을 선언할 경우 배열의 인덱스를 강제적으로 지정해줄 수 있는 명령이다. 그러므로 소스의 선두 부분에 선언해주어야 한다.
Option base 1 ' 기본 배열 첨자를 1로 설정 Dim Lower Dim MyArray(20), TwoDArray(3, 4) ' 배열 변수를 선언 Dim ZeroArray(0 To 5) ' 기본 첨자를 변경 ' LBound 함수로 배열의 하위 제한 범위를 검사 Lower = LBound(MyArray) ' 1을 반환 Lower = LBound(TwoDArray, 2) ' 1을 반환 Lower = LBound(ZeroArray) ' 0을 반환
|
동적 배열은 배열의 크기가 유동적인 배열을 의미한다. 즉 배열 선언 시 크기를 설정하지 않은 배열을 동적 배열이라고 한다. 배열을 동적으로 선언해 주는 것이 메모리를 효율적으로 사용하는 것이다.
동적 배열을 사용할 경우(정적 배열도 마찬가지) 배열의 크기를 수정할 경우가 생긴다. 이 때에는 Redim 함수를 사용하여 배열의 크기를 재정의 해줄 수 있다.
5. 연산자 연산자는 선언한 변수를 값을 넣어 계산하거나 비교하여 값을 처리할 수 있게 해준다. 논리 연산자는 논리 연산을 수행하는 데 사용하는 연산자이다. 지정 연산자는 속성이나 변수에 값을 지정한다. 비교 연산자는 비교하는 데 사용하는 연산자이다. 산술 연산자는 수학적인 계산을 수행하는 데 사용하는 연산자이다. 연결 연산자는 문자열을 연결하는 데 사용하는 연산자이다. 가. 산술 연산자 1) 곱셈, 나눗셈, 덧셈, 뺄셈 연산자 설명 : 두 숫자를 사칙 연산하는 데 사용한다. 구문 :
결과 = 수식1 * 수식2 결과 = 수식1 / 수식2 결과 = 수식1 + 수식2 결과 = 수식1 - 수식2
|
구성 요소
| 설 명
| 결과
| 임의의 특정 숫자 변수
| 수식 1
| 임의의 특정 수식
| 수식 2
| 임의의 특정 수식
|
2) 정수 나눗셈(\) 연산자 & 나머지(Mod) 연산자 정수 나눗셈 연산자와 나머지 연산자를 이용하면 몫(\: 역슬래시)과 나머지(Mod)를 구할 수 있다. 즉, 9를 2로 나눈 몫과 나머지를 구하려면 아래와 같이하면 된다.
Private Sub Command1_Click() Label1.Caption = 9 Mod 2 '1을 반환 Label2.Caption = 9 \ 2 '4를 반환 End Sub
|
나. 지수 연산자 (^) 설명 : 숫자를 지수로 거듭 제곱하는 데 사용한다. 구문 :
구성 요소
| 설 명
| result
| 임의의 특정 숫자 변수
| number
| 임의의 특정 수식
| exponent
| 임의의 특정 수식
|
다. 연결 연산자 (&, +) 1) 문자열 연결(&) 연산자 설명 : 두 식의 문자열을 연결하는 데 사용한다. 구문 :
결과= expression 1 & expression 2
|
구성 요소
| 설 명
| 결과
| 임의의 특정 변수
| expression 1
| 임의의 특정 식
| expression 2
| 임의의 특정 식
|
2) 덧셈 연산자 (문자열과 문자열) 덧셈 연산자의 경우 문자열 연결 연산자와 같이 문자열과 문자열을 연결해 준다. 라. 논리 연산자 산술 논리 연산자는 True, False로 나타낸다. 좌변과 우변에 따라 And, Or, Xor, Imp, Eqv의 논리값이 다르게 나타난다. And는 논리곱, Or는 논리합, Xor는 배타적 논리합, Eqv는 배타적 논리곱, Imp는 필요 충분 조건을 검사하는 논리 연산자이다. 마. 비교 연산자
연산자
| 설명
| 결과가 True인 조건문
| 결과가 False인 조건문
| 결과가 Null인 조건문
| <
| 보다 작다
| expression 1 < expression 2
| expression 1 >= expression 2
| expression 1 또는 expression 2 = Null
| <=
| 작거나 같다
| expression 1 <= expression 2
| expression 1 > expression 2
| expression 1 또는 expression 2 = Null
| >
| 보다 크다
| expression 1 > expression 2
| expression 1 <= expression 2
| expression 1 또는 expression 2 = Null
| >=
| 크거나 같다
| expression 1 >= expression 2
| expression 1 < expression 2
| expression 1 또는 expression 2 = Null
| =
| 같다
| expression 1 = expression 2
| expression 1 <> expression 2
| expression 1 또는 expression 2 = Null
| <>
| 같지 않다
| expression 1 <> expression 2
| expression 1 = expression 2
| expression 1 또는 expression 2 = Null
|
6. 제어문 비주얼베이직의 제어문에는 조건문(If, Select Case), 반복문(While, Do Loop )이 있고 그 외에 Exit이 있다.
분 류
| 제어문
| 설 명
| 조건문
| If
| 조건에 따라 분기를 한다.
| Select Case
| 지정한 변수에 따라 분기한다.
| 반복문
| For
| 초기값, 증가값, 최종값을 지정하여 반복한다.
| While
| 조건을 만족하는 동안만 문장을 반복한다.
| Do...Loop
| 조건을 만족하는 동안만 문장을 반복하거나 조건을 만족할 때까지 문장을 반복한다. Exit Do문을 사용하여 반복하는 중간에 중지할 수 있다.
| 기타
| Exit
| 수행 중에 강제적으로 종료를 할 때 사용한다.
|
가. If .. Then .. Else If .. Then ..Else 문은 가장 기본적인 비교문 중에 하나이다. If .. Then .. Else 문은 다음과 같은 구문을 사용한다.
If .. Then .. Else 문은 크게 2가지 형태로 사용된다. ① If 조건식 Then [실행코드] [Else] [실행코드] ② If 조건식 Then [실행코드] [ElseIf 조건식 Then] [실행코드] [Else] [실행코드] End If
|
If문에서는 조건식이 참일 경우, Then 이하의 코드를 수행하게된다. 그리고 조건식이 거짓일 경우는 Else나 End If로 수행이 넘어가게 되는 것이다. If문을 ①과 같이 사용할 경우 End If를 생략할 수 있다. 그러나 프로그래밍 습관상 되도록 End If를 사용해주는 것이 좋다. 다음은 If ∼ Then 문을 간단하게 사용한 예제이다.
Private Sub cmdIf_Click() Dim 선택 As VbMsgBoxResult 선택 = MsgBox("종료하시겠습니까?", vbYesNo, "If 예제") If 선택 = vbYes Then End Else Beep End If End Sub
|
위의 예제는 버튼을 클릭했을 경우, 종료 메시지 상자가 나타난다. 그리고 종료 메시지 상자에서 '예' 버튼을 클릭했는가 아니면 '아니오' 버튼을 클릭했는가의 결과값을 "선택" 변수에 저장한다. 그리고 간단한 If .. Then .. End if 문으로 비교를 한다. 나. Select .. Case Select .. Case 문은 여러 가지 조건을 비교할 경우에 사용되는 비교문이다. 간단히 말해서 식의 값에 따라 몇 개 그룹의 문중의 하나를 실행한다. 즉 입력값(비교 대상)은 하나이고 비교해야 할 경우가 여러 가지일 경우에 사용한다. Select .. Case 비교문의 구문은 다음과 같다.
Select Case 비교대상 [Case] 비교문(값) 실행코드 [Case] 비교문(값) 실행코드 [Case Else] 비교문(값) 실행코드 End Select
|
각 Case 절 안에서는 값뿐만이 아니라 식이나 범위를 사용할 수 있다. 예를 들면 다음과 같은 표현도 가능하다.
Case 1 To 4, 7 To 9, 11, 13, Is > 최대값
|
Case 문에서 주의해야 할 점은 Case 문 다음에 실행될 코드는 반드시 Enter키 이후에 기재해주어야 한다는 점이다. 그러면 Case문을 이용한 간단한 예제를 보도록 하자. 다음 소스는 커맨드 버튼 컨트롤 한 개와 레이블 컨트롤만이 있는 폼에서 작성한 코드이다.
Const 정답번호 As Integer = 70 Private Sub cmdCase_Click() Dim 추측번호 As Double Dim 입력문자 As String 입력문자 = InputBox("1부터 100 사이 숫자", "1에서 100사이") 추측번호 = Val(입력문자) Select Case 추측번호 Case 1 To 69 lblResult.Caption = "조금 올려보세요 " + 입력문자 Case 71 To 100 lblResult.Caption = "조금 낮추어보세요? " + 입력문자 Case 70 Beep lblResult.Caption = "정답이네요 " + 입력문자 Case Else lblResult.Caption = "바보아냐? " + 입력문자 End Select End Sub
|
다. For 문 For 문은 전형적인 반복문으로 자주 사용되는 편이다. 변수의 초기값에서 증가값만큼 증가를 해서 최종값까지 반복을 한다. Step과 증가값을 생략하면 자동으로 1씩 증가한다. For 다음의 변수와 Next 다음의 변수는 동일해야 한다. 같지 않으면 에러가 발생한다. For 문이 하나인 경우에는 Next 다음의 변수를 생략하여 For 문을 사용해도 된다. For 문의 사용 형식은 다음과 같다.
For counter = start To end [Step step] [statements] [Exit For] [statements] Next [counter]
|
For...Next 문은 아래 요소로 구성된다.
구성 요소
| 설 명
| counter
| 루프 카운터로 사용되는 숫자 변수 이 변수는 배열 요소 또는 사용자 정의 형식의 요소가 될 수 없다.
| start
| counter의 초기값
| end
| counter의 최종값.
| step
| 루프를 반복할 때마다 매번 바뀌는 counter의 합계이다. 지정하지 않으면 step의 기본값은 1이 된다.
| statements
| 지정한 횟수만큼 반복해서 실행되는 For와 Next 사이에 있는 하나 이상의 문이다.
|
step 요소는 양수 또는 음수가 될 수 있다. 일단 루프를 시작하고 해당 루프의 모든 문을 실행하였으면 counter에 step를 더한다. 이 때 처음 루프를 실행시킨 것과 동일한 검사를 수행하여 루프의 문을 다시 실행하거나 루프를 빠져 나와 Next 문 바로 뒤에 있는 문으로 계속 실행된다. Exit For 문은 루프를 빠져나가는 방법을 제공하기 위해 For...Next 제어 구조 안에서만 사용할 수 있다. 여러 개의 Exit For 문을 루프 안의 아무 곳에 둘 수 있다. Exit For 문은 If...Then 문과 같은 조건문을 계산할 때 자주 사용되며 Next문 바로 뒤에 오는 문으로 제어를 전송한다. For...Next 루프는 다른 For...Next 루프 안에 중첩시킬 수 있다. 각 루프에 유일한 변수 이름을 counter 변수로 제공해야 한다. 올바른 For...Next 중첩문의 예는 아래와 같다.
For I = 1 To 10 For J = 1 To 10 For K = 1 To 10 . . . Next K Next J Next I
|
Private Sub Command1_Click() Dim Total As Integer Total = 0 For i = 1 To 100 Total = Total + i ' 1에서 100까지 합을 구한다. Next Label1.Caption = Total End Sub
|
라. While 문 주어진 조건이 True인 동안은 일련의 문을 계속 실행한다.
While condition [statements] Wend
|
While...Wend 문은 다음과 같은 구성 요소로 되어있다.
구성 요소
| 설 명
| condition
| 필수. 수식 또는 True나 False로 평가되는 문자식 condition이 Null인 경우 condition은 False로 처리된다.
| statements
| 선택. 주어진 조건이 True인 동안 하나 이상의 문을 실행한다.
|
condition이 True이면 Wend 문을 만날 때까지 모든 statement를 계속 실행한다. 그런 다음 프로그램의 제어가 While 문으로 반환되고, condition은 다시 평가된다. condition이 여전히 True인 경우 프로그램은 반복하여 처리된다. True가 아닌 경우 프로그램은 Wend문 다음 문을 실행한다. While...Wend 루프는 어느 수준에서든 중첩하여 사용할 수 있다. 각 Wend 문은 가장 최근의 While 문에 대응한다. 다음은 While...Wend 루프의 예제이다.
Private Sub Command1_Click() Dim i As Integer Dim Total As Integer '초기값 0을 넣어준다. i = 0 While i < 100 i = i + 1 Total = Total + 1 ' 1에서 100까지 합을 구한다. Wend Label1.Caption = Total End Sub
|
마. Do∼Loop 문 조건이 True인 동안 또는 True가 될 때까지 한 블록의 문을 반복한다.
Do [{While | Until} condition] [statements] [Exit Do] [statements] Loop 또는 다음과 같은 구문을 사용할 수도 있다. Do [statements] [Exit Do] [statements] Loop [{While | Until} condition]
|
Do∼Loop 문은 다음과 같은 구성 요소로 되어 있다.
구성 요소
| 설 명
| condition
| 선택. True이거나 False인 수식이나 문자식이다. condition이 Null이면 condition은 False로 처리된다.
| statements
| condition이 True인 동안 또는 True일 때까지 반복되는 하나 이상의 문이다.
|
Do...Loop를 종료하기 위한 대체 방법으로서 Exit Do 문을 얼마든지 Do...Loop의 어느 곳에서나 사용할 수 있다. Exit Do는 If...Then과 같은 어떤 조건을 평가한 후에 사용하는 경우가 많다. 그럴 경우 Exit Do 문은 Loop 바로 다음에 오는 문에 제어를 전송한다.
|