Skip Navigation Links.
Expand VBAVBA
엑셀프로그래밍이 필요한 이유
Expand ExcelExcel
Expand External LibraryExternal Library
Expand SolutionSolution
Expand EssayEssay

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,3)
MsgBox Application.Sum(rngX)

오브젝트라고 하는것도 역시 하나의 결과물이고 이것을 변수에
전달할때는 항상 Set 키워드를 붙인다는 점!!기억하시고..

논리 표현식/Logical Expression

가장 쉬운데 가장 어려워하는 논리식..
논리식이란 표현식은 표현식인데 결과값이 True냐 False냐 두개만을
만들어내는 식을 논리식이라고 부른다
즉 결과가 논리값(True,Flase,Yes,No)인 표현식인것이다
사람들은 이 논리값을 제일 꺼려한다
사람에게 무엇을 물어보면서..Yes아니면 No로 답을 하라고 하면
무척이나 깝깝한 노릇이다..
실은 배경이 어쩌구..저쩌구 해야 자신의 심정을 이야기 하게 되는데
간단하게 Yes,No로 답하라니..!@#@

그래서 사람들은 컴퓨터프로그래밍의 핵심인 논리식을 가까이 하고
싶어하지 않는다
사실을 이야기하라는 것이지..여러분의 심정을 이야기 하자는것이 아니니
너무 피하지 마시기 바란다

몇가지 명백한 사실을 따져보자
아래의 카렌더의 날자를 크릭하고 옆의 논리값을 원하는 질문을
살펴보시기 바란다

<2024년 5월>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678
날자는 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=4False
True AND FalseFalse
3=3 OR 3=4True
True OR FalseTrue
3=3 OR Not 3=4True
True OR FalseTrue
Not( 3=3 And 3=4)True
Not( True And False)True
Not( 3=3 And 3=3) And 23>12False
Not( True And True) And TrueFalse


위의 논리식이 다음에 나오는
조건문과 순환문과 조합되어 프로그래밍이 되어 가는것이다

아래의 화일에서 엑셀의 워크시트상에서
조건부서식을 통한 논리식을 점검해보아도 좋을것이다
엑셀시트상의 조건부서식을 할줄 모른다면 엑셀은 초보수준인셈이다
논리식이 숙달안되었음을 의미한다

Review Excel Logical Formula