3. 기타/게임

웹브라우저 게임 트라비안 방어 및 시터 운영 2/2, if문 과 iserror roundup large 함수

래빗 크리스 2009. 3. 15. 03:07

자원이나 빌딩을 신규 건설 또는 업그레이드 하는데 필요한 자원별 비용과 소요시간을 산출해 봅시다.
아래 그림과 같이 '이번 작업' 을 클릭하면 작업 목록이 주욱 나오고,
적당한 것을 클릭하면 "필요 제고량", "현재 기준 +/-", "필요 제고량 소요시간" 등을 구하도록 해 보자.



I3 셀을 클릭하고 아래 그림과 같이 '데이터(D)', '유효성 검사(L)...' 를 클릭한다.



아래 그림과 같이, '데이터 유효성' 창, '설정' 탭에서 제한 대상을 '목록' 으로 하고,
'원본(S)' 를 알맞게 설정한 다음에 '확인' 버튼을 클릭한다.
그런데 여기서 문제가 하나 있다. '원본(S)' 을 'Data' 워크시트에서 선택하고 싶은데, 그게 안 된다.
엑셀의 '이름' 기능을 이용하려고 해도 안 되는 것은 마찬가지다.
울며 겨자먹기 식으로, 'Data' 워크시트에서 A 칼럼의 내용들을 복사해서 'Status' 워크시트의 안 보이는 곳에 붙여넣기 한다.
그래도 '공백 무시(B)' 옵션이 있기 때문에 범위를 넉넉하게 해 놓으면 나중에 확장할 때 조금이나마 도움이 된다.



I4:I6 에도 I3 의 내용을 반영하자. 먼저 I3 의 셀을 '복사' 한다.
I4:I6 를 선택하고 선택된 범위를 마우스 오른쪽 버튼으로 클릭하고, '선택하여 붙여넣기(S)...' 를 클릭한다.



'선택하여 붙여넣기' 대화상자에서 '유효성 검사(N)' 을 선택하고 '확인' 버튼을 클릭한다.



필요 제고량에는 vlookup 을 이용한다. 여기에서는 if 문과 iserror 함수도 함께 사용해 보자.
vlookup 함수는 "웹브라우저 게임 트라비안 방어 및 시터 운영 2/2, vlookup 과 이름" 을 참조 하시라..
vlookup 함수를 통해 가져오는 값에 문제가 있다면 이를 보정해 주어야 하기 때문에 if 와 iserror 도 사용한다.
if(조건, 조건이 참인 경우의 실행문, 조건이 거짓인 경우의 실행문) 과 같은 형식으로 사용한다.
iserror(조건) 으로 사용하는데, 조건에 오류가 있으면 true, 오류가 없으면 false 를 돌려준다.
아래 수식의 경우 vlookup 함수에서 오류가 발생하면 0 (Zero) 를, 오류가 없으면 vlookup 에서 가져온 값을 사용한다.
vookup 의 첫번째 인자에 혼합좌표가 사용된 것을 고민해 볼 필요가 있다.
저렇게 해 놓으면 칼럼은 '이번 작업' 명칭에 고정하고 아이디별로 가져오는 값이 달라진다.
이렇게 해 두었으니 J3 의 값을 복사하여 J3:M6 의 범위에 '수식' 으로 붙여넣기 해 준다.



자, 이제는 해당 작업을 할때 자원별로 필요한 제고량이 나왔으니 현재 보유량과 비교할때,
해당 자원이 얼마나 남고 모자라는지 확인해 보자.
B3 셀에 현재 보유하고 있는 목재량(B10) 에서 필요한 목재 제고량 J3 을 뺀다.
B3 셀을 복사하여 B3:E6 에 복사하면 필요한 내용이 나온다.
여기에도 조건부 서식이 설정되느데, 이때는 마이너스 값이 나오면 빨간색으로 표시하도록 하자.



자, 이제 이번 내용의 마지막 설명이다. J17 셀을 보자.
'이번 작업' 에 필요한 '필요 제고량' 을 현재 기준으로 따져 보았을때 마이너스 값이 나오면,
해당 제고가 모자른다는 것이다. 그러면 얼마나 시간이 소요될까..?
마이너스 수치이니까 먼저 -1 을 곱해서 플러스 수치로 만들고,
시간당 생산량으로 나누어 시간을 구하고 소숫점 처리를 위해서..
roundup 함수를 사용하여 소숫점을 기준으로 무조건 올림 처리한다.
J17 셀을 복사하여 K17:M17 에 수식으로 붙여넣기 한다.



그러면 이들 각각의 자원별 대기시간에 근거하여 '이번 작업' 을 수행하는데 소요되는 시간을 구해보려면..?
large 라는 함수를 이용해서 각 자원별 소요시간 중 가장 큰 값을 1개 가져오면 된다.
I17 셀에 =LARGE(J17:M17,1) 라고 입력하면 된다. 마찬가지로 I18:I20 까지 수식으로 붙여넣기 한다.
아래 그림을 보면 알겠지만, 목재 5, 점토 3, 철 5, 작물 1 중에서..
작물은 1시간 안에 자원이 목표치를 상회하고, 목재나 철은 5시간이 지난 다음에야 이번 작업이 이루어질 만큼 자원이 모인다.
그렇다면 '이번 작업' 을 빨리 진행하려면..? 작물을 팔고 목재나 철을 구매하든지, 목재와 철을 원조 받으면 된다.
그런데, 장터를 이용하거나 원조받는 데 소요되는 시간을 알아야  하지 않을까..? 이 부분은 다음번에 다루기로 한다.



이상..