VBA에서 엑셀함수 사용하기

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

[code]area = Application.WorksheetFunction.Pi * radius ^ 2
a = Application.WorksheetFunction.Acos(b)
Set myRange = Application.Worksheets("Sheet1").Range("C1:C60")
mySum = Application.WorksheetFunction.Sum(myRange)[/code]

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

또 다른 방법으로는 Evaluate 메소드를 사용하는 것이다.
[code]mySum = Evaluate("=Sum(C1:C60)")[/code]

Posted by solarview

2009/06/14 22:04 2009/06/14 22:04
,
Response
No Trackback , No Comment
RSS :
http://www.solarview.net/rss/response/253

앞서 기술한 것처럼, 비주얼베이직6.0과 VBA에는 삼각함수의 역함수인 ArcSin()과 ArcCos()이 없다. 대신 Atn()만 있다.
도움말을 보면 다음과 같이 작성하라고 안내하고 있다.
[code]역 사인 (ArcSin(x)) =   Atn(x / sqr(-x * x + 1))
역 코사인 (ArcCos(x)) = Atn(-x / sqr(-x * x + 1)) + 2 * Atn(1)[/code]
이대로 하면 분모가 0이 되는 경우에 대한 대책뿐만 아니라, x가 -1<=x<=1 범위를 벗어날 경우에 대한 대책이 없다.
특히, 부동소수계산을 하다보면 정확하게 -1 또는 1이 되지 않고, -1.0000000** 또는 1.000000**가 되는 경우가 발생한다. 이에 대한 대책이 필요하다.
 
[code lang-vb]Function ArcSin(ByVal x As Double) As Double
    If Abs(Fix(x)) <> 1 Then '-1<x<1일때는 계산, x<=-2, x>=2 일때는 오류 발생
        ArcSin = Atn(x / Sqr(-x * x + 1))
    Else ' Abs(Fix(x)) = 1일 때 즉 -2<x<=-1, 1<=x<2
        ArcSin = Sgn(x) * Atn(1) * 2
    End If
End Function

Function ArcCos(ByVal x As Double) As Double
    If Abs(Fix(x)) <> 1 Then ''-1<x<1 일때는 계산, x<=-2, x>=2 일때는 오류 발생
        ArcCos = Atn(-x / Sqr(-x * x + 1)) + 2 * Atn(1)
    Else ' -2<x<=-1, 1<=x<2
        If x > 0 Then 'Fix(x)=1일 때 즉 1<=x<2
            ArcCos = 0
        ElseIf x < 0 Then 'Fix(x)=-1일 때 즉 -2<x<=-1
            ArcCos = Atn(1) * 4
        End If
    End If
End Function[/code]

Posted by solarview

2009/06/11 18:22 2009/06/11 18:22
,
Response
No Trackback , a comment
RSS :
http://www.solarview.net/rss/response/252