전 국민 코딩 시대 엑셀 VBA 기초 5 - If ~ Then 문( If ~ Then, Else, 관계 연산, 논리연산, Looping, Goto)

전 국민 코딩 시대 엑셀 VBA 기초 5 - If ~ Then 문( If ~ Then, Else, 관계 연산, 논리연산, Looping, Goto)

전 국민 코딩 시대 엑셀 VBA 기초 5 - If ~ Then 문( If ~ Then, Else, 관계 연산, 논리연산, Looping, Goto) If 문은 VBA뿐만 아니라 모든 프로그래밍 언어에서 가장 많이 사용하는 중요한 명령어로, 논리적인 사고를 필요로 합니다 2진 조건 IF 문 출처 입력 1 2진 조건 IF 문 2진 조건에서는 참(조건 성립)이냐 거짓(조건 미 성립)의 결과에 따른 처리를 합니다 예를 들어 주민등록 번호의 성별코드에서 "남성" 또는"여성"을 판단하는 것과 같은 조건이 2진 조건이 되겠습니다 가 2진 조건 IF 문 형식 형식 If 조건 Then VBA 코드 1 Else VBA 코드 2 End If 의미 If 조건 에서 조건이 성립할 경우 VBA 코드 1을 실행, 조건이 성립되지 않으면 Else 다음의 VBA 코드 2를 실행, Else가 없을 경우 If 다음 라인의 명령을 실행, End If 문은 종료 2 2진 조건 IF 문 성별 체크 예제 아래와 같이 엑셀 Sheet1에 작성된 성별 코드로 성별을 판단하는 방법을 알아보겠습니다 플로우 차트로 보면 이해가 좀 빠를듯합니다 "성별코드 = 1"이면 "성별 = "남성"으로 처리하고, "성별코드 = 2"이면 "성별 = "여성"으로 처리합니다 사진 설명을 입력하세요 이와 같이 플로우차트를 보고 프로그래밍하는 것을 코딩한다고 하는데요 코딩 결과는 아래와 같습니다 If Sex_Code = 1 Then Sex_Name = "남성" Else Sex_Name = "여성" End If VBA 코딩 결과를 실행해 보면 아래 와 같이 앤드류는 "남성"이 체크되었습니다 그러면 아래의 린다리의 성별은 어떻게 결과를 얻을지에 대해서는 한번 해보시기 바랍니다 사진 설명을 입력하세요 만약 아래와 같이 Else 문을 사용하지 않았을 경우, 처음 If 문의 조건이 성립되어 Sex_Name = "남성" 을 실행 후 다음 줄의 Sex_Name = "여성" 을 실행하여 결국 변수 "Sex_Name"는 최종 값 "여성"기억될 것입니다 If Sex_Code = 1 Then Sex_Name = "남성" ' Else Sex_Name = "여성" End If 이러한 If 문의 특성을 잘 알고 있어야지 남성을 여성으로 판단하는 중대한 실수를 범하지 않을 것입니다 2진조건문에서 Else를 생략 시 아래와 같이 조건 성립이 되면 성별 = "남성" 을 실행 후 다음 행의 성별 = "여성" 행을 실행하는 겁니다 물론 조건 성립이 안되는 경우는 "End if"로 빠져나갑니다 반복 실행(Looping) If 문을 사용하여 Looping을 구현할 수 있습니다 예를 들어 1부터 100까지 합을 구한다고 할 때 2진 조건 IF 문 으로만으로는 해결이 안 되기 때문에 지정한 변수의 값이 1부터 100까지 반복해서 수행하게끔 하는 것이 Looping입니다 나중에 For~Next 문을 사용하면 Looping는 간단하게 처리되겠지만 먼저 If 문을 사용하는 Looping에 대해 알아보도록 하겠습니다 형식 If 조건 Then VBA 코드 1 Else VBA 코드 2 End If 의미 If 조건에서 조건이 성립할 경우 VBA 코드 1을 실행, 조건이 성립되지 않으면 Else 다음의 VBA 코드 2를 실행, Else가 없을 경우 If 다음 라인의 명령을 실행, End If 문은 종료 아래의 플로우 차트는 1부터 100까지의 합을 구하는 플로우 차트입니다 변수 I는 1부터 100까지 1씩 증가하는 값으로 I의 값이 100이 때까지 변수 K가 I의 값을 누적합니다 그런데 If 문에 "I 가 100보다 작으면"이면 위로 올라가서 "I = I + 1"로 I의 값을 1 증가시키고 있습니다 이와 같이 조건이 만족할 때까지 같은 동작을 반복하는 것을 반복문 Looping)이라고 합니다 If 문에 "I 가100작으면" 위로 올려 주는 명령어는 Goto이고, Goto에서 지정한 위치 지정자는 뒤에 콜론":"을 붙여 구분합니다 참고로 모든 프로그래밍 언어에서는 Goto 명령의 사용을 지양하고 있으니, 프로그래밍 시 가급적 Goto 명령의 사용을 지양하시기를 권고합니다 사진 설명을 입력하세요 변수 K가 변수 I 값을 누적하는 원리는 아래와 같습니다 변수 K는 변수 I의 값이 100이 될 때까지 누적을 하며 결과는 "1 + 2 + 3 + 4 + ··· + 100 = 5,050"이 됩니다 가 직접 실행 창 출력 if i "100보다 작으면" then Goto Loop_Ping"에 의해 I의 값이 100이 될 때까지 "Loop_Ping:"을 반복 실행합니다 나 엑셀 시트로 보내기 이번에는 1부터 10까지의 합을 엑셀 시트로 보내겠습니다 엑셀 시트로 보내는 방법은 이전 블로그에서 다루었던, Range를 사용합니다 This_Sheet Range("A" & I + 1) = I 에서 "Range("A" & I + 1)" "I + 1"한 이유는 I = 0 K = 0 Loop_Ping: I = I + 1 K = K + I This_Sheet Range("A" & I + 1) = I This_Sheet Range("B" & I + 1) = K If I "10보다 작으면" Then GoTo Loop_Ping End If 1부터 10까지 합을 구하기 위한 Sheet2의 1행을 타이틀로 사용하였기 때문입니다 This_Sheet Range("A2:B11") Clear 에 대해 이전 블로그에서 다루었는데, A열 2행부터 B 열 11행까지의 내용을 지우고 시작하게 됩니다 참고로 This_Sheet Range("A2:B11") Clear 과 같이 VBA 코드로 작성된 내용은 Ctrl + Z으로 복원되지 않는다는 점 꼬옥 기억하시기 바랍니다 다 예외 경우 앞에서 숫자 1부터 N까지의 합의 누적 " ( 1 + 2 + 3 + 4 + ··· + N) "을 구해 보았는데요 그러면 1부터 N까지의 곱의 누적(N!) " ( 1 * 2 * 3 * 4 * ··· * N) "을 구하고자 할 때 N 값을 10으로 해서 구해 보도록 하겠습니다 변수 K가 0일 경우 아무리 큰 수를 넣어도 결과는 0이 되기 때문에 이번에는 초깃값을 1로 합니다 "K = K * I"의 결과는 ( 1 * 2 * 3 * 4 * ··· * 10 )를 구하는데, Sub If_Test4() ' 변수와 Object 선언 Dim This_Sheet As Worksheet Dim I, K As Integer Set This_Sheet = Sheet3 This_Sheet Range("A2:B11") Clear I = 0 K = 1 Loop_Ping: I = I + 1 K = K * I This_Sheet Range("A" & I + 1) = I This_Sheet Range("B" & I + 1) = K If I "1보다 작으면" Then GoTo Loop_Ping End If End Sub 아래와 같이 "오버플로"에러가 나오고, 사진 설명을 입력하세요 엑셀 Sheet3에 ( 1 * 2 * 3 * 4 * 5 * 6 * 7 )까지의 결과만 나왔습니다 엑셀 Sheet3에 ( 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10 )까지의 결과가 나오게끔 직접 해보시기 바랍니다 힌트는 ( 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10 )까지의 결과는 3,628,800입니다 이상 "전 국민 코딩 시대 엑셀 VBA 기초 5 - If ~ Then 문( If ~ Then, Else, 관계 연산, 논리연산, Looping, Goto)"에 대해 알아보았습니다 =============================== 참고 : 네이버 블로그 - 전 국민 코딩 시대 엑셀 VBA 기초 5 - If ~ Then 문( If ~ Then, Else, 관계 연산, 논리연산, Looping, Goto)