brunch

You can make anything
by writing

C.S.Lewis

by 별더하기 Sep 25. 2020

#16강 종합실습, 매출과 성과

지금까지 학습한 모든 내용을 활용하여 다음의 실전문제를 풀어본다. 

이번 실전문제는 변수, 배열, 조건, 반복 등 알고리즘의 핵심이 모두 포함된 매우 중요한 문제이다.



20일까지의 각 사업부별 매출을 기준으로 다음을 작성하시오.

(배열과 조건 및 반복문을 반드시 포함해야 한다.)


1) 30일까지의 최종 판매 금액을 산출하시오.

2) 최종 판매 금액의 판매 목표 대비 달성률을 산출하시오.

3) 달성률을 기준으로 성과를 다음과 같이 표기하시오.

100~90% → A, 80~89% → B, 70~79% → C, 60~69% → D, 나머지 F

문제를 한 번에 모두 해결하기보다 하나씩 단계적으로 풀고 하나로 합치는 과정을 갖는 것이 좋다. 

30일까지의 최종 판매 금액부터 산출해 본다.


Sub F16_01()

Dim C_SALES(7), L_SALES(7) As Double

Dim I As Integer

For I = 0 To 7

C_SALES(I) = Worksheets(“Sheet1”).Cells(I + 5, 3).Value

L_SALES(I) = (C_SALES(I) * 30) / 20

Worksheets(“Sheet1”).Cells(I + 5, 4).Value = L_SALES(I)

Next

End Sub


현재 판매 금액과 산출될 최종 판매 금액이 담길 배열변수 C_SALES(7)과 L_SALES(7)을 선언하였다. 

사업부의 개수가 8개이므로 배열변수의 길이를 7로 하였다. 

배열변수는 0부터 시작이므로 7이다. 

그리고 자동증가변수 I를 통해 0부터 7까지의 구간을 반복하도록 FOR문을 작성한다.

현 판매 금액을 배열변수에 담을 때 열은 3열로 고정되어 있고 사업부가 행이 바뀌며 반복되므로 셀의 위치에서 행의 값은 자동증가변수 I를 활용한다.

FOR문 안에 위치한 현 판매 금액이 담기는 배열변수 C_SALES를 확인해보면 괄호 안에 표기되는 숫자값이 자동증가변수가 입력된 것을 확인할 수 있다. 

이것은 각 배열변수의 길이가 0에서 7까지이므로 FOR문의 자동증가변수와 길이가 동일해 I값을 활용한 것이다. 

즉 FOR문이 수행될 때마다 I는 1씩 증가하게 되고 배열변수도 맞춰 변경되며 저장된다는 의미가 된다.

저장된 현 판매 금액을 활용하여 비율에 따라 최종 판매 금액을 산출하고 역시 같은방법으로 배열변수 L_SALES에 I값을 활용하여 저장한다. 

그리고 산출된 L_SALES값을 해당 셀 위치에 출력한다. 

이때도 열을 고정하고 행을 I값에 따라 변경하면 된다.

계속해서 최종 판매 금액의 판매 목표 대비 달성률을 산출해 본다.


Sub F16_01()

Dim C_SALES(7), L_SALES(7), M_GOAL(7), M_RATE(7) As Double

Dim I As Integer

For I = 0 To 7

C_SALES(I) = Worksheets(“Sheet1”).Cells(I + 5, 3).Value

L_SALES(I) = (C_SALES(I) * 30) / 20

Worksheets(“Sheet1”).Cells(I + 5, 4).Value = L_SALES(I)

M_GOAL(I) = Worksheets(“Sheet1”).Cells(I + 5, 5).Value

M_RATE(I) = L_SALES(I) / M_GOAL(I)

Worksheets(“Sheet1”).Cells(I + 5, 6).Value = M_RATE(I)

Next

End Sub

앞서의 코드에 목표 금액과 달성률을 저장할 배열변수를 추가한다. 

역시 비슷한 방법으로 목표 금액을 배열변수 M_GOAL에 담고 최종 판매 대비 달성률을 산출하여 M_RATE 배열변수에 저장한다. 

그리고 해당 셀에 맞춰 출력하면 된다. 

이번에도 자동증가변수 I의 활용을 유심히 살펴보기 바란다. 

마지막 문제인 달성률을 기준으로 성과를 출력해 본다.

Sub F16_01()

Dim C_SALES(7), L_SALES(7), M_GOAL(7), M_RATE(7) As Double

Dim I As Integer

Dim EV_MSG As String

For I = 0 To 7

C_SALES(I) = Worksheets(“Sheet1”).Cells(I + 5, 3).Value

L_SALES(I) = (C_SALES(I) * 30) / 20

Worksheets(“Sheet1”).Cells(I + 5, 4).Value = L_SALES(I)

M_GOAL(I) = Worksheets(“Sheet1”).Cells(I + 5, 5).Value

M_RATE(I) = L_SALES(I) / M_GOAL(I)

Worksheets(“Sheet1”).Cells(I + 5, 6).Value = M_RATE(I)

If M_RATE(I) > 0.89 Then

EV_MSG = “A”

ElseIf M_RATE(I) > 0.79 And M_RATE(I) < 0.9 Then

EV_MSG = “B”

ElseIf M_RATE(I) > 0.69 And M_RATE(I) < 0.8 Then

EV_MSG = “C”

ElseIf M_RATE(I) > 0.59 And M_RATE(I) < 0.7 Then

EV_MSG = “D”

Else

EV_MSG = “F”

End If

Worksheets(“Sheet1”).Cells(I + 5, 7).Value = EV_MSG

Next

End Sub

달성률에 따른 성과를 저장하기 위한 문자형 변수 EV_MSG만 추가되었다. 

중요한 부분은 달성률이 제시된 조건에 따라 분기되는 IF문 구문이다. 

총 5개의 제시된 조건 중에서 비교 대상은 4개이다. 

그리고 60% 미만은 F로 표기되므로 ELSE문으로 처리했다.

또 하나 유념해야 할 부분은 시작과 끝이 정확히 나누어진다는 점이다. 

SUB가 시작되면 END SUB, FOR가 시작되면 NEX 그리고 IF가 시작되면 END IF로 그 끝을 명확히 설정해줘야 한다.


https://youtu.be/3PGlpftkets

매거진의 이전글 #15강 반복문을 통한 구구단
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari