엑셀의 값 찾기 메뉴는 수학 문제 풀 때 답을 잘 모르겠으면 거꾸로 4지 선다형에서 제시된 값을 대입해서 맞는지 알아보는 것처럼, 컴퓨터가 여러가지 수를 임의로 대입해서 가장 근사한 값을 찾아가는 과정입니다.
1. 엑셀 목표값 찾기
가. 메뉴
데이터 메뉴 - 가상분석 아래에 세가지 소메뉴가 있는데, 가운데에 '목표값 찾기'라고 되어 있습니다.
![엑셀 가상분석 - 목표값 찾기](https://blog.kakaocdn.net/dn/vAGRY/btqGWT8p3S7/ykKl9bhw9XEee9xeQArt8k/img.png)
나. 사례
⑴ 목표 원리금 달성을 위한 이자율 또는 원금 계산
복리라는 것이 없지만 복리계산식을 적용해서 원리금이 10만원이 되도록 하는 이자율 또는 10년동안 납입해야 할 원금을 구하기 위해 목표값 찾기 기능을 이용할 수 있습니다.
㈎ 이자율 구하기
![](https://blog.kakaocdn.net/dn/cGLYwx/btqG3kcqpfL/jX4SDvOuxWGC3CPpVZe3K0/img.png)
① 데이터 - 가상분석 - 목표값 찾기 메뉴를 누릅니다.
② 아래와 같이 수식 셀은 C2셀, 찾는 값은 10만원이므로 100000이라고 입력하고, 값을 바꿀 셀은 이자율이므로 A2셀을 클릭하고, 확인 버튼을 누릅니다.
![](https://blog.kakaocdn.net/dn/ReI9B/btqGX4BTmjF/NRc7JqGlIJqxiDiWRylFd0/img.png)
③ 그러면 아래와 같이 목표값과 현재값으로 10만원이 표시되고, 이자율이 0.05에서 0.23618로 변경되었습니다. 다시 확인버튼을 눌러 확정합니다. 취소버튼을 누르면 이자율이 0.05로 돌아갑니다.
![](https://blog.kakaocdn.net/dn/bsqwyZ/btqG4a1FqSC/ikcqyVjiX4QJyq0f3CTdF0/img.png)
㈏ 원금 구하기
① 위와 방식은 같은데 값을 바꿀 셀이 A2에서B2로만 변경되고, 이자율을 0.05로 바꿔야 합니다.
![](https://blog.kakaocdn.net/dn/mIK3X/btqG2Idw1IT/g4eRkCKR4VypCsW3HdSE91/img.png)
② 아래와 같이 목표값과 현재값이 일치하고, 원금이 61,391로 변경되었습니다. 당연히 이자율이 낮아지니 원금을 많이 넣어야 하겠지요.
![](https://blog.kakaocdn.net/dn/bO1Fie/btqG1YHETkJ/fzGoRdSXeP6jYMkh5iYKP0/img.png)
⑵ 복잡한 산식의 목표값 구하기
연봉 6천만원과 5천만원을 맞추기 위해 시급을 얼마로 해야 하는지 구하려고 합니다. 통상시급과 기본급과 연장수당 산식은 아래와 같고, 자격수당도 아래 금액으로 정해져 있다고 가정합니다.
![](https://blog.kakaocdn.net/dn/Un2lk/btqG2GUlqtf/7fpZmqu1T4p6fZcHaJ4mr0/img.png)
파일은 아래와 같습니다.
현재와 변경의 연봉 차액을 0으로 만들어도 되고, 변경된 연봉의 합계를 N6셀의 금액으로 해도 됩니다.
㈎ 차액을 0으로 만드는 시급 구하기
아래와 같이 방정식 풀 듯이 수식으로 합계금액이 나오는 시급을 구할 수도 있습니다. 굉장히 어려워 보이죠? 그러니 목표값 찾기로 해보겠습니다.
![](https://blog.kakaocdn.net/dn/boEQDu/btqGYL3a8Cs/MuPoqIyzgZlbHkzGKthVT0/img.png)
① 수식셀으로 o6셀, 값으로 0, 값을 바꿀 셀로 i6셀을 지정하고 확인 버튼을 누르면,
![](https://blog.kakaocdn.net/dn/butvps/btqG2G055jI/2MbFSxVQ1leJmkP9aSUWb1/img.png)
② 아래와 같이 '셀에 값이 있어야 합니다'란 에러 메시지가 나옵니다. 이는 시급이 숫자로 되어 있어야 하는데, 수식으로 되어 있어서 그런 것입니다.
![](https://blog.kakaocdn.net/dn/l3hGC/btqG3Ft7AUq/wQbd2ZVaVruSRoz7AYHme0/img.png)
③ 취소 버튼을 누른 후 i6셀을 20,000으로 수정하고, 다시 목표값 찾기를 합니다.
④ 아래와 같이 시급이 20,446으로 변경되고, 차액이 0으로 됩니다. 확인 버튼을 누릅니다.
![](https://blog.kakaocdn.net/dn/Enth5/btqGWUfczwR/Yphfks0nSI5mMVuF1iL4q0/img.png)
⑤ 이번에는 O7셀의 차액을 0으로 만들기 위한 i7셀의 값을 구해 보겠습니다. 먼저 i7셀의 시급을 15,000으로 수정합니다.
![](https://blog.kakaocdn.net/dn/qwZGv/btqG3lPVfAL/7l3yEfD6YPF3n8836G9wc0/img.png)
⑥ 그런데 이번에는 목표값과 현재값이 일치하지 않고 현재값이 20으로 나옵니다. 이것은 통상시급 등 수식에 round, rounddown 등 반올림 관련 함수가 있어 소숫점이하를 조정할 수 없기 때문입니다. 어쨌든 시급이 17,120원으로 수식으로 구한 값과 일치합니다.
![](https://blog.kakaocdn.net/dn/RvRB3/btqG3kXLWFt/hsioPnlxkkwKXlgmY4BMzK/img.png)
⑦ 통상시급, 기본급, 연장수당의 round와 rounddown을 제거하니 차액이 20에서 17로 바뀌었습니다. 반올림 또는 절사때문에 차이가 발생하는 것입니다.
![](https://blog.kakaocdn.net/dn/bg3g94/btqG2Gtd9cU/PhAeIBbJ0Vkxscbxylf2z1/img.png)
⑧ 다시 목표값 찾기를 해보겠습니다. 목표값과 현재값이 0으로 일치합니다. 그러나, 시급은 17,120으로 변함이 없습니다. 시급의 소숫점이하가 바뀌어서 그렇습니다.
![](https://blog.kakaocdn.net/dn/wkVus/btqG3kjdpjY/kkxMYUZw2CZ82fhYWDvCf0/img.png)
⑨ j7셀에서 '자릿수 늘림' 아이콘을 누르니 소숫점이하가 숫자가 표시되어 0이 아님을 알 수 있습니다.
![](https://blog.kakaocdn.net/dn/bimiYr/btqGWS9xKCz/RQfwEzoPA3DsRnaiDpN8K1/img.png)
⑩ i7셀을 확인해보니 17119.7346672466으로 소숫점이하 10자리까지 있습니다.
![](https://blog.kakaocdn.net/dn/bbcxXF/btqG3lvBmmX/wLjqZUYUDXQGLmrTLlBeQ0/img.png)
㈏ 합계액을 일치시키는 시급 구하기
① 데이터 - 가상분석 - 목표값 찾기 메뉴를 누른 후 수식 셀을 이번에는 N7셀을 지정하고, 찾는 값으로는 현재 값 4,316,660을 입력하고, 값을 바꿀 셀로 i7셀을 지정하고, 확인 버튼을 누릅니다.
![](https://blog.kakaocdn.net/dn/S3wAI/btqGYLvhR6O/11OfXRM0lGzH8BhLdaABH1/img.png)
② 목표값과 현재값이 일치하고, 시급도 변함없이 17,120원으로 표시됩니다. 당연한 결과죠?
![](https://blog.kakaocdn.net/dn/Iyfln/btqG2Gtd9ax/urIq4EGLAXpquzNxeTtho0/img.png)
2. 매크로로를 이용하여 '목표값 찾기' 반복 실행
위에서 "왜 목표값 찾기를 따로 두번 하지?" 라는 의문을 가지셨을 겁니다.
만약 목표값 찾기시 수식 셀과 바꿀 셀을 두개를 지정하고 확인 버튼을 누르면
![매크로를 이용한 목표값 찾기 반복 실행](https://blog.kakaocdn.net/dn/u3RZV/btqGWSPftz8/6E0G3i1DQ82uqiWXYWvgsK/img.png)
아래와 같이 "셀을 하나만 참조해야 합니다"라고 에러 메시지가 나옵니다.
![](https://blog.kakaocdn.net/dn/dyqC6a/btqGY7rVozL/RMCZqZV72Dkai1KDG5ke1k/img.png)
따라서, 매크로를 이용해 반복 수행하도록 해야 합니다.
매크로 작성이 어렵다면 컨닝, 다시 말해 매크로 기록을 하면 됩니다.
가. 매크로 기록
① 개발도구 - 매크로 기록을 누릅니다.
![](https://blog.kakaocdn.net/dn/IFfg2/btqGWTHlR8E/6FkXCjHXK1DxKDBmxzthk0/img.png)
② 매크로 이름이 '매크로1'이라고 나오는데, '목표값찾기'로 수정하고 확인 버튼을 누릅니다. '목표값 찾기'식으로 중간에 공백이 있으면 안됩니다.
![](https://blog.kakaocdn.net/dn/6Ll8D/btqGWSIuldV/1v4i343dlZo4snFO7wVbNk/img.png)
③ 목표값 찾기를 실행합니다.
![](https://blog.kakaocdn.net/dn/ex0xcw/btqGZG8k4j4/UMaVxoklbayIu7XfMzWuFk/img.png)
④ 확인 버튼을 누릅니다.
![](https://blog.kakaocdn.net/dn/csEJRq/btqG3kDtHVq/KLpNNu307GYzoE0RPFbwk0/img.png)
⑤ 이제 매크로 기록을 마쳤으니 개발도구 - 기록 중지를 클릭합니다.
![](https://blog.kakaocdn.net/dn/xj3KP/btqG2HTgex8/Sked9Tbh0zkD57IfbixcS0/img.png)
⑥ 코드를 수정하기 위해 개발도구 - Visual Basic 아이콘을 누르거나, Alt + F11 단축키를 누릅니다.
![](https://blog.kakaocdn.net/dn/bc0H2D/btqGX4u58H3/gZyC8KA88UrcFaDHrSRJaK/img.png)
⑦ 사무직연봉.xlsx 아래 모듈이 닫혀 있으므로, 모듈 왼쪽 + 모양을 클릭합니다.
![](https://blog.kakaocdn.net/dn/QsjfP/btqGYLvhR43/xmBEGu2Yfo1rpg0htKXMC0/img.png)
⑧ 그러면 아래와 같이 모듈 아래 Module이 표시됩니다.
![](https://blog.kakaocdn.net/dn/boCg4B/btqGWSIuleR/GC19udVkyG0RVidODvmch0/img.png)
⑨ Module1을 더블 클릭하면 오른쪽 코드 창에 '매크로 기록'으로 기록한 매크로 문이 보입니다.
![](https://blog.kakaocdn.net/dn/bBc6fP/btqG13vI8te/SfaJfgXg2vsxL9dXgjj4KK/img.png)
나. 매크로 수정
① Application.CutCopyMode = False 는 불필요하므로 마우스로 범위를 잡은 후 Del키를 눌러 지웁니다.
![](https://blog.kakaocdn.net/dn/bby1iH/btqG2G055mb/JeFnjSbYXQe1wa1VcBqwB0/img.png)
② 반복을 해야 하므로 for ~ next문을 이용합니다.
아래 구문을 보니 o6와 i6중 6만 7로 변하도록 하면 됩니다.
Range("O6").GoalSeek Goal:=0, ChangingCell:=Range("I6")
range("o6")는 변수 i를 사용하면 range("o"&i)라고 표현합니다. i6도 마찬가지로 range("i"&i) 라고 쓰면 되겠죠?
③ 그리고, option explicit 라고 맨 위에 있으므로, 변수를 명시적으로 선언해야 합니다. 따라서,
dim i as integer 를 추가해야 합니다. i란 변수를 선언하고, 데이터 타입을 정수로 정하는 것입니다.
그러면 아래와 같이 완성됩니다.
dim i as integer for i = 6 to 7 Range("O" & i).GoalSeek Goal:=0, ChangingCell:=Range("I" & i) next |
다. 매크로 실행
① 시급이 바뀌었는지 확인해야 하므로, 엑셀로 돌아오기 위해 엑셀 아이콘 또는 Alt + F11키를 누릅니다. VBA 상태로 가는 것도 엑셀로 돌아가는 것도 Alt + F11키입니다.
![](https://blog.kakaocdn.net/dn/bcBPqe/btqG6eo0iaQ/ENtggTycsCswwGRgXbMRz0/img.png)
② 시급을 20,000과 15,000으로 수정합니다.
![](https://blog.kakaocdn.net/dn/PWNM5/btqG5LAyUmo/3RUMr9c43ZbHzKoBwg2ts0/img.png)
③ 개발도구 - 매크로 메뉴를 누른 후 매크로 목록에서 '목표값찾기'를 찾아 실행합니다.
![](https://blog.kakaocdn.net/dn/pcLWQ/btqG2HFEqRe/U0F4uh0UkPe8hiuRgECqTk/img.png)
④ 아래와 같이 시급 2개가 모두 바뀐 것을 알 수 있습니다.
![](https://blog.kakaocdn.net/dn/cyXSga/btqGWTUVosG/bQqr5kaFC0Wcu6a4CDbRO1/img.png)
⑤ 이제 매크로가 들어갔으므로 일반 통합문서로는 저장하지 못하므로, 파일 - '다른이름으로 저장'을 선택한 다음, 파일 타입을 '매크로 사용 통합문서'로 변경한 후 저장버튼을 누릅니다.
![](https://blog.kakaocdn.net/dn/lQ33r/btqG3lh3U4v/CdL2qqSFF1PpKeTGUGmvQ0/img.png)
방정식 근 찾기는 따로 다루도록 하겠습니다.
'Excel' 카테고리의 다른 글
엑셀 목표값 찾기와 방정식 근 구하기(3) (0) | 2020.08.24 |
---|---|
엑셀 목표값 찾기와 방정식 근 구하기(2) (3) | 2020.08.22 |
지번 형식 변환하기 1 (if, not, iserror, or, left, mid, find, substitute 등 함수 이용) (0) | 2020.07.30 |
rand, randbetween함수, 누계값 구하기 (0) | 2020.07.29 |
엑셀, 텍스트와 숫자 다루기(2)(value, text, istext, isnontext, exact, t, n, numbervalue, isnumber 함수) (3) | 2020.07.24 |