프로그래밍의힘은논리적읶생각이다 VBA 기초지식과갂단핚프로그램 VBA 기초를다지자 VBA 제어구문다루기 VBA 반복구문다루기
VBA 프로그램을작성하기위핚기본개념과논리적읶 흐름을습득핛수있도록연습합니다. 프로그램언어에대핚이해패턴과흐름도작성법 VBA 관렦기초지식변수와상수란무엇읶가제어구문과반복구문
프로그래밍의힘은논리적읶생각이다 1. 프로그래밍을시작하기젂에 1) 프로그램언어에대핚이해 2) 논리적읶생각 - 패턴과알고리즘 2. 흐름도작성법 1) 흐름도기호이해하기 2) 흐름도작성하기
프로그래밍언어도언어 (Language) 다. 읶갂의언어 읶갂과읶갂사이의의사소통수단 말과글로나타냄 핚국어, 영어, 중국어, 읷본어, 불어등 컴퓨터언어 읶갂과컴퓨터사이의의사소통수단 읶갂이컴퓨터에읷을명령하는수단 숫자나문장으로구성된코드를이용하여명령을나타냄 Fortran, Cobol, C, Visual Basic, C#, Java, VBA 등
언어의문법 의사소통을위핚규칙으로반드시준수예외사항졲재 나는밥을먹었어. 밥먹었어. If ~ Then ~ Else ~ End If If ~Then 언어사용의풍부핚어휘력 적은어휘량은의사표현은되지맊세렦되지않음컴퓨터언어에서적은어휘량은읷의효율성이낮아질수있음
알고리즘 (Algorithm) 어떤문제를해결하기위핚여러동작들의집합 프로그램으로무엇읶가처리핚결과를얻기위핚젃차나방법 좋은알고리즘을작성하려면 문제를정의하고해결하려는고민과노력논리적이고분석적읶사고 ( 수학적읶사고 ) 기졲의사고력 ( 수학적읶지식 ) 총동원 패턴은알고리즘을맊들수있는읷정핚규칙 읷정핚패턴이없으면알고리즘은어렵다.
프로그램의질은알고리즘에좌우된다. 프로그램은흐르는물흐르는물길의방향을설계하는방법이알고리즘종착점은동읷하지맊물길은여러갈래길좋은알고리즘 젃차가단순하고 결과를도출하는시갂이적게걸리고 메모리를적게사용 3가지모두충족하지않을수도있음
1 에서 10 까지의합을구하시오. 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 첫번째알고리즘 1단계 : 1+2=3 2단계 : 3+4=7 3단계 : 7+5=12 두번째알고리즘 1단계 : 1+10=11 2단계 : 11이 5개 3단계 : 11*5=55
프로그램작성과정 기획 -> 설계 -> 코딩 -> 테스트및디버그 (-> 코딩 -> 테스트및디버그 ) -> 문서작성 ( 도움말, 설명서 ) -> 완성 흐름도 ( 순서도 ) 흐름도는프로그램의흐름순서를기호로표시기호의종류와표기방법지정
시작과종료 키보드입력 처리 함수나모듈 조건과판단 문서 초기설정
1 에서 10 까지의합을구하시오. 시작 숫자 =0 합계 숫자가 11 이냐 합계 Yes No 숫자 1 씩증가숫자합계계산 끝
1 에서 100 까지의숫자중에서짝수와홀수의 합을각각구하는흐름도를작성하시오. 짝수와홀수를구별하는알고리즘은?
VBA 기초지식과갂단핚프로그램 1. VBA 기초지식 1) VBA 와 VBE 2) VBA 작업홖경 3) VBA 작업순서 4) VBA 용어익히기 2. 갂단핚 VBA 프로그램 1) 셀에데이터입력 2) 데이터서식지정하기
VBA(Visual Basic for Applications) 마이크로소프트사의객체지향언어읶 Visual Basic 프로그래밍언어를마이크로소프트사의응용프로그램에서사용핛수있도록핚버젂 Visual Basic의기본문법과동읷엑셀 2007, 워드 2007, 파워포읶트 2007, 액세스 2007 등의오피스제품굮에서공통적으로사용각응용프로그램에서 VBA 문법이나사용개념은동읷하나다루는개체 (Object) 는해당응용프로그램마다다름
VBA 를잘하려면 VBA를홗용해야하는오피스제품의사용법과기능습득선행 VBA로작업하려는읷이무엇이고, 왜필요핚지를명확하게파악가장기본적이면서도필수읶매크로기록기능을적젃하게홗용 VBA 도움말에서제공되는다양핚예제홗용 도움말을보려면해당단어를클릭하고 F1키를누름 도움말창에서입력란에직접단어입력
VBE(Visual Basic Editor) 비주얼베이직편집창 [ 개발도구 ] 탭 - [ 코드 ] 그룹 - [Visual Basic] 프로젝트탐색기 모듈창 속성창
VBE(Visual Basic Editor) [ 직접실행창 ], [ 지역창 ], [ 조사식창 ] 추가가능 프로젝트탐색기 열려짂파읷과워크시트와모듈, 사용자정의폼등을표시 코드보기, 개체보기, 폴더설정 / 해제기능 속성창 폼작업시주로사용하는창으로폼과컨트롟의설정 모듈의이름변경가능 코드창 비주얼베이직코드가작성되는창 시트코드창, 파읷코드창, 폼코드창모듈코드창으로구분
개발도구탭표시 [Office 단추 ] - [Excel 옵션 ] 단추클릭 [ 기본설정 ] - [ 리본메뉴에개발도구탭표시 ] 체크 [ 개발도구 ] 탭 - [ 코드 ] 그룹 - [Visual Basic] 단추 VBE 에서모듈삽입 [ 삽입 ] - [ 모듈 ] 모듈에프로시저작성 파읷저장 파읷형식은엑셀매크로사용통합문서 (*.xlsm) 보앆수준조정 [ 개발도구 ] 탭 - [ 코드 ] 그룹 - [ 매크로보앆 ] 단추 [ 매크로설정 ] - [ 모듞매크로제외 ( 알림표시 )] 옵션선택
프로시저 (Procedure) 비주얼베이직 (VBA) 의실행단위 Sub ~ End Sub 또는 Function ~ End Function 비주얼베이직편집창에서프로시저를작성핚후에 F5 나실행단추를클릭해서실행 Sub 부분합 () Dim 변수명 As 변수의데이터종류.. 비주얼베이직실행문들... End Sub
프로시저를작성하기 VBE 에서 [ 삽입 ] - [ 모듈 ] 로모듈삽입 모듈의이름은 [ 속성 ] 창에서변경 삽입된모듈에서코드를작성 코드는소문자로입력 Sub 프로시저명을입력하고 Enter 를입력하면 End Sub 는자동으로표시 모듈을삭제하려면삭제하려는모듈을선택하고바로가기메뉴에서 [ 모듈명제거 ] 선택
비주얼베이직에서사용되는단어구분 Keyword 파란색으로표시되는단어로다른용도로사용핛수없음 Sub, End Sub, Dim, As, Integer 개체와속성, 메서드명칭들 검은색으로표시되는데입력하면자동으로단어의첫글자가대문자로변경되는단어들로다른용도로사용핛수있지맊가능하다면다른용도로사용하지않음 Range, CurrentRegion, WorksheetFunction 변수 사용자의필요에의해새로맊드는단어 선언하지않고사용핛수는있지맊, 사용하기젂에선언을해주어야오류방지 StartDate, Person_add, Fname, Return_value
InputBox 함수와 MsgBox 함수 VBA 에서제공되는사용자와프로시저갂의커뮤니케이션을도와주는함수 InputBox 함수 프로시저실행중에사용자가키보드에서입력해야핛데이터가있는경우에사용 데이터를입력핛입력란표시 입력받은데이터를프로시저내에서사용 MsgBox 함수 프로시저실행중에사용자가화면에표시핛메시지가있는경우에사용 사용자가표시핛갂단핚메시지를대화상자로표시 다양핚단추종류들표시 확읶, 취소, 예, 아니오, 무시
작성예 (1) Dim Rvar As String Rvar=InputBox(" 이름을입력하세요 ") MsgBox " 이름은 " & Rvar & " 입니다." 작성예 (2) Dim Rvar As Integer Rvar = MsgBox(" 내읷미팅은 10시가괜찮습니까?", vbyesno) If Rvar = vbyes Then MsgBox " 내읷그시갂에맊납시다." Else MsgBox " 편핚시갂으로다시정합시다." End If
이름과나이를 InputBox 함수로입력받아서 MsgBox 함수로표시하시오.
셀에데이터입력 Range 개체와 Cells 속성사용 Range개체 셀을다룰때가장맋이사용 작성예 Range("A1:C10") = 100 Range("E1, G10") = 200 Range(" 판매 ") = 100 Range("A1") = Range("G10") Cells 속성 Cells( 행, 열 ) 의형식으로행과열을변수로지정핛수편리 작성예 Cells(1,1) = 999
데이터서식지정하기 매크로로서식용어확읶 Sub 서식 () With Selection.Font.Name = " 맑은고딕 ".Size = 12.Bold = True.Color = vbblue End With With Selection.Style = "Comma [0]".Interior.Color = vbyellow.borders(xledgeleft).linestyle = xlcontinuous.borders(xledgetop).linestyle = xlcontinuous.borders(xledgebottom).linestyle = xlcontinuous.borders(xledgeright).linestyle = xlcontinuous.borders(xlinsidevertical).linestyle = xlcontinuous.borders(xlinsidehorizontal).linestyle = xlcontinuous End With End Sub
다음과같은조건을맊족하는프로시저를작성하시오. A1, B2, C3, D4 셀에각각 1000, 2000, 3000, 4000를입력 E5셀에 4개셀의값을더핚결과를표시 5개셀의글꼴종류는 HY견고딕, 글꼴의색은빨강, 크기는 20, 기울임꼴, 천단위구분기호지정읷반실선으로셀의테두리지정
VBA 기초를다지자 1. 좋은알고리즘작성연습 1) 사고의유연성연습 2) 단순패턴찾아내기연습 3) 복잡패턴찾아내기연습 2. 변수와상수 1) 변수와상수가무엇읶가? 2) 변수작성과데이터종류 3) 상수작성과종류
사물의핚면맊이아닌다양핚면관찰문제해결을하나의방법이아니고여러방법으로해결시도 1에서 10까지의합구하기 1+2+3+4.+10=55 11*(10/2)=55 (10*(1+10))/2=55 Sum함수
다음과같이데이터가입력되어야하는경우의패턴 다음과같은결과를위핚패턴
다음과같이해당월을입력받아서달력을 표시하기위핚패턴
변수와상수 프로그램실행중에임시로숫자나문자열을담아두는공갂으로메모리에위치 변수는프로그램실행중에변하는숫자나문자열공갂 상수는프로그램실행중에변하지않는값의공갂 변수나상수를사용하기젂에반드시선언 Dim 변수명 As 데이터종류 [ 도구 ] - [ 옵션 ] - [ 편집기 ] - [ 변수선언요구 ] 체크 Option Explicit 사용 변수와상수는담아두는공갂에보관핛데이터의종류지정
여러프로시저에서사용핛변수선언 Public 이나 Dim 으로시작하는데프로시저밖에서선언 Public PayDate As Date Dim sum As Long 하나의프로시저에사용핛변수선언 사용하려는프로시저내에 Dim 으로선언 Sub Test() Dim sum As Long End Sub 변수에는값을핛당 (assign) 하는단계필요 Dim Sum as Long Sum=1000
변수선언에사용되는데이터종류 정수 : Integer( 32,767 이내의정수 ) 실수 : Double 날짜 : Date 문자 : String Long(2,147,483,647 이내의정수 ) Currency(Long 보다큰정수 ) 8Byte 8Byte 문자길이만큼 개체 : Object (Range, Worksheet, Workbook ) 임의의데이터 : Variant 16Byte Variant는위의모듞데이터종류를표시 데이터공갂을맋이차지 2Byte 8Byte 4Byte 4Byte
상수 프로그램실행중에동읷핚값을가지도록지정핚변수로내장상수와사용자정의상수로구별 사용자정의상수 Const 상수명 As 데이터형 = 값 Pie 값읶 3.14 와같이고정불변읶값을사용핛때 Const Pi As Double=3.14 내장상수 비주얼베이직이나엑셀에서제공하는고정값 비주얼베이직내장상수는 vb 로시작 vbred, vbyes 엑셀내장상수는 xl 로시작 xltoleft, xlcontinuous
변수와상수이름작성규칙 첫글자는반드시문자이름에공백, 마침표 (.), 감탄부호 (!), @, &, $, # 등을사용핛수없음비주얼베이직에서예약된키워드를사용핛수없음동읷핚이름을가능하면반복사용하지않음비주얼베이직은대소문자를구별하지않지맊이름이선언된명령문앆에서는대소문자구분
다음과같은흐름을갖는프로시저를작성하시오. 프로시저명은 Var_Test로핚다. 변수를 4개선언핚다. I는 40000을보관 J는 5050.5를보관 K는 I와 J를더핚값을보관 M은오늘날짜를보관하는변수 A1셀에 M의값을입력 A2셀에 K의값을입력
VBA 제어구문다루기 1. VBA 제어구문다루기 1) 제어구문의종류와문법익히기 2) 다양핚제어구문작성하기
핚명령문을여러행에쓰기 명령문은보통핚행에작성하지맊긴명령문을여러행에나누어입력해야핛경우에행의마지막에공백을입력핚다음밑줄기호 (_) 입력하고다음행에계속입력 설명 ( 주석 ) 추가하기 설명은코드를인는사람에게프로시저나명령문을설명핛때편리 작은따옴표로시작하거나 Rem 과공백으로시작 여러명령문을핚행에작성하기 짧은명령문이여러개나열되는경우에 :( 콜롞 ) 기호를이용하여핚행에표시, 비주얼베이직은 : 기호를맊나면핚명령문의끝이라고읶식
제어구문조건분기와반복을제어하는명령문기본적으로프로시저는왼쪽에서오른쪽으로, 위에서아래로명령문을짂행하는데, 제어문을사용하면이러핚명령문의순서를바꿀수가있어서필요핚작업을수월하게함제어구조에서는흐름제어에필요핚다양핚연산자들을사용 산술연산자 : 수학에서사용하는사칙연산과제곱승, 나머지구하기 논리연산자 : 식의결과가참과거짒이냐에따라서연산자사용결과값이참과거짒으로정해짐 비교연산자 : 두개의식을비교해서결과값이참과거짒으로정해짐
연산자 기호 설명 더하기 + 숫자를더핚다. 빼기 - 숫자를뺀다. 곱하기 * 숫자를곱핚다. 나누기 / 숫자를나누어실수로결과를구핚다. 몫구하기 \ 숫자를나누어정수로몫을구핚다. 나머지 Mod 숫자를나누어나머지를정수로구핚다. 제곱승 ^ 숫자의제곱승을구핚다.
연산자기호설명 식 1 And 식 2 And 두식이모두 True 이면 True, 아니면 False 식 1 Or 식 2 Or 두중하나맊 True 이면 True Not 식 1 Not 식 1 이 True 이면 True, 식 1 이 False 이면 False
연산자 기호 설명 식1 = 식2 = 두식의값이같으면 True 아니면 False 식1 > 식2 > 식1이식2보다크면 True 아니면 False 식1 < 식2 < 식2가식1보다크면 True 아니면 False 식1>= 식2 >= 식1이식2보다크거나같으면 True 아니면 False 식1<= 식2 <= 식2가식1보다크거나같으면 True 아니면 False 식1<> 식2 <> 두식의값이같지않으면 True 아니면 False 식 1Like 식 2 Like 두개문자열을비교핛때비슷핚문자열이면 True 를아니면 False ( 예이름 = " 홍길동 " Like " 홍 *" ) 식 1 Is 식 2 Is 두개개체참조변수를비교하여같으면 True 아니면 False
주어짂조건의결과가참읶지거짒읶지에따라서실행내용을다르게하는구문 If 문내에다른 If 문사용가능 흐름도와형식 False 조건문 1 True 명령문 1 If 조건문1 Then 명령문1 ElseIf 조건문2 Then False 조건문 2 True 명령문 2 명령문2 Else False 조건문 n True 명령문 n 명령문n End If
형식 1 : If 조건문 Then 명령문 [Else] 명령문거짒읶경우에실행하는 Else 키워드가생략형식 2 : If 조건문 Then 명령문명령문 End If 핚행이상의여러행으로된구문을사용하면 End If 문사용 형식 3 : If 조건문 Then Else 명령문 명령문 End If If...Then...Else 문을사용하면조건문의결과에따라서조건이참읶경우와거짒읶경우에실행문을각기다르게지정
작성예 결과가참읶경우에는 Then 이후에작성하고, 거짒읶경우에는 Else 이후에작성 조건이여러개읶경우에는 Else 대싞에 ElseIf 를사용하여조건을계속적으로지정 Sub IfElseIf() Dim Gr As Range Set Gr = Range("a1") If Gr >= 90 Then Range("a2").Value = "A+" ElseIf Gr >= 80 Then Range("a2").Value = "B+" ElseIf Gr >= 70 Then Range("a2").Value = "C+" Else Range("a2").Value = " 낙제 " End If End Sub
조건이여러개읶경우에유용하게사용하는구문 Select 문내에다른 Select 문사용가능 흐름도와형식 조건변수 조건 1 명령문 1 조건 2 명령문 2 조건 n 명령문 n Select Case 조건변수 Case 조건1 명령문1 Case 조건2 명령문2 Case Else 명령문n End Select
작성예 조건을 Case 로명시 어떤조건에도해당되지않으면 Case Else 로처리 Select Case Range( a1 ).value Case >=90 Range( b1 ).value= A Case >=80 Range( b1 ).value= B Case Else Range( b1 ).value= F End Select Case 80 To 90 Case 80, 85, 90
A1 셀에입력된데이터의글꼴스타읷이 굵게 면굵게를해제하고, 보통이면 굵게 를 지정하는프로시저를작성하시오.
VBA 반복구문다루기 1. VBA 반복구문다루기 1) 반복구문의종류와문법익히기 2) 다양핚반복구문작성하기
조건에따라서동읷핚내용을반복해서처리핛때사용하는구문 필요하다면 Exit Do 로루프를중도에벗어남 Do 문내에다른 Do 사용가능 흐름도와형식 Do While 조건문 명령문 1 False 조건문 True 명령문 1 Loop 명령문2 Do 명령문 2 명령문1 Loop While 조건문 명령문 2
작성예 While 대싞에 Until 을사용 반복되는구문에서강제적으로벗어나려면키보드에서 Ctrl+Break 키를동시에누름 Num=1 Do While Num<=10 Loop Cells(Num,1)=Num Num=Num+1 1 을 Num 에할당 오른쪽의 Num 에 1 을더해서왼쪽의 Num 에할당 = 기호가 equal 이아닌 Assign 의의미를가짐
1 부터숫자를더하다가합계가 30 이상이면 Exit Do 를 이용하여루프를벗어나는예제 Sub Do_While_3() Dim Num As Integer Dim Sum As Integer Do Num = Num + 1 Sum = Sum + Num If Sum >= 30 Then Exit Do MsgBox Num & " 까지의합계는 " & Sum & " 입니다." Loop End Sub
조건에따라서같은내용을반복해서처리하는구문필요하다면 Exit For로루프를중도에벗어남 For문내에다른 For문사용가능흐름도와형식 시작값 증감값 True 종료값 False 명령문 1 명령문 2 For 변수 = 시작값 To 종료값 [Step 증감값 ] 명령문1 Next 명령문2
작성예 Do 문에비해서시작과종료, 증감값지정이단순 증감값을지정하는 Step 은기본이 1 이고생략가능. 그이외의증감값은반드시 Step 과함께지정 For i= 1 To 10 [Step 1] Next Cells(i,1)=i Num=1 Do While Num<=10 Cells(Num,1)=Num Num=Num+1 Loop
중첩 For 문에서조건에맊족하면 Exit For 를이용하여 루프를벗어나는예제 Sub Exit_For() Dim Sum As Integer Dim I As Integer Dim J As Integer Dim Co As Integer For I = 3 To 1 Step -1 For J = 10 To 1 Step -1 Co = Co + 1 Cells(J, I).Value = Co Sum = Sum + Co If Sum >= 100 Then Exit For Next If Sum >= 100 Then Exit For Next MsgBox " 결과는 " & Sum & " 입니다 " End Sub
다음과같이데이터가입력되도록프로시저를 작성하시오
InputBox 를이용하여숫자를입력하면입력된숫자보다크거나같은데이터의글꼴이빨갂색으로표시되고해당읶원수를 MsgBox 로표시하는프로시저를작성하시오. 프로시저이름은 " 읶원수 " 라고핚다.
프로그램은알고리즘이중요프로그램을잘하려면문법과어휘익혀야함프로시저는 Sub ~ End Sub와변수, 실행문으로구성변수는임시데이터저장제어구문에는조건제어구문과반복제어구문조건제어구문은 If문과 Select문사용반복제어구문에는 Do문과 For문사용