[VBA]VBA에서 엑셀함수 사용하기

엑셀 함수는 VBA 함수보다 훨씬 다양한 분야에 많은 함수들을 보유하고 있다.
앞서 살펴본 것처럼, 삼각함수 분야에도 많은 역함수를 보유하고 있다. 더군다나 스프레드시트 프로그램으로서 당연히 갖추어야 하는 함수도 많이 보유하고 있다. 예를 들면 다음과 같다.

첫줄은 원주율을 참조한 것이고, 둘째줄은 코사인 역함수를 호출하여 사용한 것이다.
셋째줄은 워크시트 내의 특정범위를 설정한 것이며, 네째줄에서 이 범위에 대한 합을 엑셀함수를 이용하여 구했다.

또 다른 방법으로는 Evaluate 메소드를 사용하는 것이다.

[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)

삼각함수 비교

삼각함수 비교

설명 Excel VBA VB6 VB.NET 비고
sin 사인함수 Sin Sin Sin Sin
cos 코사인함수 Cos Cos Cos Cos
tan 탄젠트함수 Tan Tan Tan Tan
arcsin 사인역함수 Asin Asin
arccos 코사인역함수 Acos Acos
arctan 탄젠트역함수 AtanAtan2 Atn Atn AtanAtan2
sinh 하이퍼볼릭사인함수 Sinh Sinh
cosh 하이퍼볼릭코사인함수 Cosh Cosh
tanh 하이퍼볼릭탄젠트함수 Tanh Tanh
arcsinh 하이퍼볼릭사인역함수 Asinh
arccosh 하이퍼볼릭코사인역함수 Acosh
arctanh 하이퍼볼릭탄젠트역함수 Atanh

이상에서 보듯 VB6와 VBA로 프로그래밍을 하고자 하면, 삼각함수의 역함수를 작성해야 한다.
만약 VBA에서 새로 역함수를 작성하지 않고, 엑셀함수를 사용하고자 한다면 다음과 같이 하면 된다.

VB.NET Tutorial

Visual Basic .NET에 대한 설명서가 잘 정리된 웹페이지를 소개한다.
http://www.java2s.com/Tutorial/VB/CatalogVB.htm
키워드(keyword) 별로 어떻게 쓰이는지 알고 싶다면, 꼭 한 번 들를만 하다.
또한, 비주얼베이직 닷넷 말고 지구상에 존재하는 웬만한 프로그래밍 언어에 대한 설명서도 함께 있다. 여기서는 비주얼 베이직 닷넷만 연결해 놓은 것이다. 왜? 이 홈피의 주관심사여서. ^^

[VBA]엑셀의 객체 – Appication

Application.UserName : 엑셀 사용자 이름

Application.Version : 현재 사용하는 엑셀 버전

Application.Path : 엑셀이 설치되어 있는 폴더(위치)

Application.StartUpPath : 시작 폴더(위치)

Application.DisplayStatusBar : 상태표시줄을 화면에 표시할 것인지 아니면 안 할 것인지를 설정

Application.StatusBar : 상태표시줄에 문자열을 표현

[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

파일경로와 파일이름

1. 프로그램이 시작된 경로를 알아내기
– App.Path 함수를 사용한다.

2. App.Path 사용시 주의할 점
– 루트 디렉토리일 경우 “\”를 함께 반환한다.
– 루트 디렉토리가 아닐 경우, 끝에 “\”가 없다.

3. 더 좋은 App.Path (출처 : http://www.freevbcode.com/ShowCode.asp?ID=878)
항상 끝에 “\”가 붙게 한다.

사용예

4. 프로그램 시작 경로에서 파일명 가져오기

사용예 : FormData_5장.txt를 프로그램시작경로에서 찾는다.

5. 전체파일명에서 경로만 뽑아내기

호환성 : Visual Basic 5, 6

3차원 벡터(또는 점)에 대한 구조체(structure)

3차원 벡터(또는 점)에 대한 구조체(structure)를 아래와 같이 작성할 수 있다.
<특이점>
1) 벡터의 성분은 X, Y, Z로 명백하므로 그냥 Public 변수로 설정함
2) 배열로 선언된 벡터 성분과도 호환되도록 함
– VB.NET의 Default Property를 이용함
– 사용예 :

구조체 소스코드