Expression|Formula|Expression|Statement|Logical Expression|
|Logical Operators|Comparison Operators|
|Assignment Statement||Month()|Date()|
|Application.Sum|Application.Max|And|Or|Not|
표현식!!프로그래밍의 생명이다!!
엑셀의 수식에 능한 분들은 표현식은 이미 고수들이다
논리,표현식만 능숙해도 VBA프로그래밍없이도
엑셀을 훨씬 잘 사용할수 있다
워크시트는 수식(Formula)라고 했고
VB에서는 표현식(Expression)이라고 한다
VB뿐만이 아니고 모든 프로그래밍언어에서 같은 의미인것이다
Dim iX As Integer
iX=3+4+5+6*2^2
에서 어떤결과가 나타나는 명령문(Statement)이 표현식인것이다
위의 구문에서 3+4+5+6*2^2 라는 문장은 하나의 결과가 나온다
즉 계산의 결과가 있는것이다
이런 결과가 나오는 문장..표현식인것이다
이 표현식에서 나온 값을 변수 iX에 담는다는 것을
할당명령문(Assignment Statements)이라고 한다
Dim iX As Integer
iX=3+4+5+6*2^2
MsgBox iX
는 표현식의 결과를 iX에 담아서 MsgBox의 매개변수로 전달하여
대화상자에 결과가 나타난것이다
이것은 그냥 아래와 같이도 된다
MsgBox3+4+5+6*2^2
로하여도 결과는 마찬가지다
함수의 매개변수에 표현식의 결과가 전달된것이다
그러나
Dim iX As Integer
3+4+5+6*2^2
MsgBox iX
라고 한다면 에러가 난다
표현식의 결과를 어디에 담을지 지정이 되지 않았으니 표현식의
결과가 허공에 떴다
담을 그릇이 없는것이다!!
담을 그릇(변수)가 없는데 계산을 왜하나??
표현식의 결과값은 어딘가에 반드시 보내줘야 하는것이다
아래의 경우는 VBA의 내장함수에서 결과를 받아서 문자열과 연결한
결과를 만들어주는 표현식
Dim sMonth As String
sMonth=Month(Date())
& "월"
MsgBox sMonth
다음은 엑셀의 시트상의 값을 계산하는 표현식을 만들어 본다
Dim lngNum As long
lngNum=Application.Sum(Range("A1:H3"))
MsgBox lngNum
MsgBox Application.Max(Range("A1:H3"))
MsgBox Application.Sum(Range("A1:H3").Columns(1))
'같은 변수을 위에서 써먹고..또 써먹어도 된다
lngNum=Application.Sum(Range("A1:H3").Rows(2))
MsgBox lngNum
결과값을 만들어 내는 표현은 모두 표현식인것이다
(위에서 오브젝트에 색상을 표현하는 명령은 생략하였다
나중에 징그럽게 많이 나올것이니까..그냥 표현식이라는 관점에서 보시기 바란다)
또 하나..아래와 같이
오브젝트(나중에 본격적을 이야기 할것이 오브젝트이다)라는 결과를 갖여다
주는 표현도 역시 표현식이다
rngX라는 변수에 범위 A1에서 행으로 몇칸,열로 몇칸 확장시킨
범위를 얻어서 전달하는 표현식인것이다
Dim rngX As Range
Set rngX=Range("A1").Resize(1,2)
MsgBox Application.Sum(rngX)
오브젝트라고 하는것도 역시 하나의 결과물이고 이것을 변수에
전달할때는 항상 Set 키워드를 붙인다는 점!!기억하시고..
논리 표현식/Logical Expression
가장 쉬운데 가장 어려워하는 논리식..
논리식이란 표현식은 표현식인데 결과값이 True냐 False냐 두개만을
만들어내는 식을 논리식이라고 부른다
즉 결과가 논리값(True,Flase,Yes,No)인 표현식인것이다
사람들은 이 논리값을 제일 꺼려한다
사람에게 무엇을 물어보면서..Yes아니면 No로 답을 하라고 하면
무척이나 깝깝한 노릇이다..
실은 배경이 어쩌구..저쩌구 해야 자신의 심정을 이야기 하게 되는데
간단하게 Yes,No로 답하라니..!@#@
그래서 사람들은 컴퓨터프로그래밍의 핵심인 논리식을 가까이 하고
싶어하지 않는다
사실을 이야기하라는 것이지..여러분의 심정을 이야기 하자는것이 아니니
너무 피하지 마시기 바란다
몇가지 명백한 사실을 따져보자
아래의 카렌더의 날자를 크릭하고 옆의 논리값을 원하는 질문을
살펴보시기 바란다
|
날자는 3월이다 | |
날자는 10일이다 | |
날자는 월요일 | |
날자는 10일보다 크고 20일보다 작다 | |
날자는 2006년도이다 | |
날자의 년도를 4로 나누면 0이다 | |
날자는 일요일이 아니다? | |
날자는 일요일과 월요일이 아니다 | |
날자는 2006년이고 5월이다 | |
날자는 15일 혹은 20일이다 | |
|
프로그래밍이라고 하는것은 바로 위와 같은 질문의 연속이고
질문에 대한 답에 따라서 어떤것을 명령할지 결정하는 작업의
연속인것이다
위에서 글로서 나타낸 표현을 컴퓨터가 알아듣게 표현하는것이
논리표현식인것이다
프로그래밍에 능숙하다 하는것은 위의 논리표현식을 줄줄줄..
엮어낼줄 알면 되는것이다
권하건데 위와 같은 논리적화법을 인간관계에서 써먹으면 곤란하다
고지식하기 짝이 없다고 하고,기분나쁜놈이라고 관계를 갖으려고 하지 않는다
사람관계를 떠나서 일과 컴퓨터프로그래밍에서만 위의 화법을 써야한다
특히 연애를 하는 선남선녀는 절대 위와 같은 화법하면 백전백패다
논리연산자와 비교연산자/Logical Operators,Comparison Operators
위의 말로 표현된 논리적화법을 VB가 이해하는 기호로 바꿔야 한다
그것이 바로 비교,논리연산자들이다
비교연산자는 초등학교때배운것들이다
비교연산자 | 설명하자면.. |
= | 3=3,3과 3이 같은가??당연히 같지..값은 True |
<> | 3<>3,3과 3이 틀린가??당연히 틀리지..값은 False |
< | 3<3,왼쪽3이 오른쪽 3 보다 작은가??틀리지..값은 False |
> | 3>3,왼쪽3이 오른쪽 3 보다 큰가??당연히 틀리지..값은 False |
<= | 3<=3,왼쪽 3이 오른쪽3 보다 같거나 작은가??당연히 틀리지..값은 False |
>= | 3>=3,왼쪽3과 오른쪽3 보다 작거나 같은가??당연히 틀리지..값은 False |
논리연산자는 엑셀에서 OR함수나 NOT함수 혹은 AND함수를
표현식에서 표현한것이다
테이블의 표현식부분에 차례대로 마우스를 옮겨보면서 보시기 바란다
제일 쉬운것 같으면서 제일 헷갈리는 표현식이 논리 표현식이기도 하다
논리 표현식 | 결과값 |
3=3 AND 3=4 | False |
True AND False | False |
3=3 OR 3=4 | True |
True OR False | True |
3=3 OR Not 3=4 | True |
True OR False | True |
Not( 3=3 And 3=4) | True |
Not( True And False) | True |
Not( 3=3 And 3=3) And 23>12 | False |
Not( True And True) And True | False |
위의 논리식이 다음에 나오는
조건문과 순환문과 조합되어 프로그래밍이 되어 가는것이다
아래의 화일에서 엑셀의 워크시트상에서
조건부서식을 통한 논리식을 점검해보아도 좋을것이다
엑셀시트상의 조건부서식을 할줄 모른다면 엑셀은 초보수준인셈이다
논리식이 숙달안되었음을 의미한다
Review Excel Logical Formula