[VB6, VBA]삼각함수의 역함수(ArcSin, ArcCos) 작성

앞서 기술한 것처럼, 비주얼베이직6.0과 VBA에는 삼각함수의 역함수인 ArcSin()과 ArcCos()이 없다. 대신 Atn()만 있다.
도움말을 보면 다음과 같이 작성하라고 안내하고 있다.

이대로 하면 분모가 0이 되는 경우에 대한 대책뿐만 아니라, x가 -1<=x<=1 범위를 벗어날 경우에 대한 대책이 없다.
특히, 부동소수계산을 하다보면 정확하게 -1 또는 1이 되지 않고, -1.0000000** 또는 1.000000**가 되는 경우가 발생한다. 이에 대한 대책이 필요하다.

FYI

ArcSin, ArcCos을 작성한 이유 : 태양기하학에서는 태양의 방위각과 고도를 계산하는 과정에서 삼각함수를 많이 사용한다. 1보다 작은 값들로 사칙연산을 하다보면, 부동소수가 정상 범위를 벗어나는 경우가 생긴다. 이런 오류를 사전에 방지하기 위해서 작성하였다.

태양의 고도를 계산하는 공식은 다음과 같다.

\sin h = \sin \delta \sin L + \cos \delta  \cos L \cos H

따라서,

h = \arcsin \left( \sin \delta \sin L + \cos \delta \cos L \cos H \right)

  • h (태양의 고도) : -90° ~ +90°
  • δ (태양의 적위) : -23.5° ~ +23.5°
  • L (위도) : -90° ~ +90° (남극 ~ 북극)
  • H (시각) : -180° ~ +180° (00시는 -180°, 06시는 -90°, 12시는 0°, 18시는 +90°, 24시는 +180°)

태양 방위각 \phi 은 다음과 같은 공식으로 구한다.

\cos \phi = \frac{\sin h \sin L - \sin \delta}{\cos h \cos L}

 \phi =\arccos \left( \frac{\sin h \sin L - \sin \delta}{\cos h \cos L} \right)

[VBA]VBA 함수들

VBA함수를 정리해놓은 사이트가 있어서 소개한다. 이들 사이트에서 복사한 다음, 출처를 표기할까 하는 생각을 좀 했다. 그러나, 개인적으로 누가 원저자인지를 모르겠어서 그냥 주소만 여기에 옮겨놓는다.

 

http://www.cancould.com.ne.kr/hamsu.htm

http://pmguda.com/464

http://skql.tistory.com/127

비주얼 베이직 함수라고 하는데, VBA 함수가 더 정확한 표현인 것 같다.

[VBA]IF문의 이해 : 이차방정식 풀기 Solve the quadratic equation using Excel

문제) 엑셀을 이용하여 이차방정식( ax^2 + bx + c = 0)을 풀어라

출제의도) If문을 이해한다.

해법)

1) 첫행(셀A1부터 셀E1까지)에 방정식에 필요한 계수들을 기록한다.

2) 둘째 행을 계수의 입력과 근에 대한 출력으로 설정한다.

3) 마지막 셀(셀F2)에 프로시저를 실행시킬 ‘단추’를 둔다.

사용자 삽입 이미지

4) VBA로 이차방정식을 푸는 프로시저를 다음과 같이 작성한다.

특징: 실근뿐만 아니라 허근도 구한다. 불능과 부정도 판정한다. 설령 이차항의 계수가 0일지라도, 즉 이차방정식이 아닐지라도 계산한다.

[VBA]macro와 vba

매크로 기록은 조작한 명령을 기록하는 것으로 처리를 자동화할 때 편리한 기능이다. 조건에 따라 처리를 분기시키거나 원하는 값을 구할 때까지 계산을 반복시키는 복잡한 처리는 불가능하다. 이것은 VBA의 범주로 넘어간다. VBA를 시작한 사람은 우선 매크로 기록에서 전체를 이해하고, 다음에 Visual Basic Editor를 사용하여 코드를 추가/수정하는 것으로 원하는 매크로로 바꾸는 것이 VBA를 이해하고 실행하는데 효과적인 방법이다.

출처 : Katsuyuki Watanabe et al, 감춰놓고 혼자보는 엑셀비밀노트 970, p.652

[VBA]PERT/CPM를 위한 엑셀 (Excel Spreadsheet for Critical Path Mathod)

간단한 작업 입력으로 PERT/CPM의 주요 계산을 수행하는 프로그램이다.

공장 또는 작업현장에 있어서의 원자재로부터 최종제품에 이르기까지의 자재,제품조립 및 종합 조립의 흐름을 순서 정연하게 능률적인 방법으로 계획하고 공정을 결정하고 예정을 세워 작업을 할당하고 감독하는 절차가 공정관리이다.

작업 흐름을 순서정연하게 하는 방법 중의 하나가 주공정법(critical path method)으로 본 프로그램은 주공정법을 수행할 수 있도록에 작성되었다.

작업명, 설명, 소요일수, 선행작업 등을 입력하여 공정시간과 여유시간을 계산하여 출력하고, 작업흐름을 한 눈에 볼 수 있도록 간트 도표를 출력한다.

엑셀 프로그램의 특징

1) 작업의 공정시간(EST, EFT, LST, LFT)을 계산한다.
2) 작업의 여유시간(TF, DF, FF)을 계산한다.
3) 작업의 주공정(Critical Path) 여부를 판단한다.
4) 작업의 바 차트를 그려준다.

프로그램의 구성
1) 사용설명서 시트 -> 사용을 위한 주의사항이 있음 (매크로 사용시 필독)
2) 입력 시트 -> 사용자가 직접 입력하는 부분과 계산 부분이 함께 있음
3) 바 차트 시트

프로그램 설명

사용자 삽입 이미지

Download file : CriticalPath.XLS

1) 입력시트에서 작업명, 설명, 소요일수, 선행작업 등을 입력한다.
– 작업명은 알파벳으로 한글자 이상 입력한다
– 설명에는 작업 내용을 기술한다.
– 선행작업이 둘 이상일 때는 쉼표로 구분한다.
2) 입력이 완료되면, 계산실행 단추를 누른다.
3) 공정시간과 여유시간을 계산하여 출력한다. 또한 간트도표를 별도의 시트에 출력한다.

참고한 논문에서는 엑셀의 내장 함수를 이용하여 계산하였으나,
본 엑셀은 내부적으로 비주얼베이직(Visual Basic)을 이용하였다.

If you want to read an english post, please click here.