지금까지 학습한 모든 내용을 활용하여 다음의 실전문제를 풀어본다.
이번 실전문제는 변수, 배열, 조건, 반복 등 알고리즘의 핵심이 모두 포함된 매우 중요한 문제이다.
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로 그 끝을 명확히 설정해줘야 한다.