VBA에서 엑셀함수 사용하기

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

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


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

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

크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by 솔라뷰

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

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

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

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


크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by 솔라뷰

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

VBA 함수들

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

 

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

http://pmguda.com/464

http://skql.tistory.com/127

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

크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by 솔라뷰

2008/11/12 18:41 2008/11/12 18:41
, ,
Response
No Trackback , No Comment
RSS :
http://www.solarview.net/rss/response/218

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

문제) 엑셀을 이용하여 이차방정식을 풀어라

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

해법)

 

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

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

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

 

사용자 삽입 이미지

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

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

Sub SolveQuadraticEquation()
Dim a As Single
Dim b As Single
Dim c As Single
'Dim x1 As Single '실근만 있을때는 유효하나, 허근이 있으면 좀 곤란하게 되지요.
'Dim x2 As Single
Dim d As Single '판별식 discriminant
Dim u As Single
Dim v As Single
Dim output1 As String '허근의 표시 문자인 i를 출력하기 위해서,
Dim output2 As String '그리고 부정과 불능을 출력하기 위해서 문자열로 처리함.

'1) 셀에서 값을 읽어온다. Read the varibles from the excel cells
a = Range("A2")
b = Range("B2")
c = Range("C2")
'
'2) find the roots of equation
If a <> 0 Then ' -->quadratic equation
d = b ^ 2 - 4 * a * c
u = -b / (2 * a)
If d > 0 Then
'서로 다른 두 실근(實根)을 갖는다.
v = Sqr(d) / (2 * a)
output1 = u + v
output2 = u - v
ElseIf d < 0 Then
'허근(虛根)을 갖는다.
v = Sqr(-d) / (2 * a)
output1 = u & "+" & v & "i"
output2 = u & "-" & v & "i"
Else 'd=0
'중근(重根)을 갖는다.
output1 = u
output2 = output1
End If
Else 'a = 0
If b <> 0 Then '--> linear equation
output1 = -c / b
output2 = "None"
Else 'b= 0
If c <> 0 Then
output1 = "不能"
output2 = "不能"
Else 'c = 0
output1 = "不定" 'indeterminate
output2 = "不定"
End If
End If
End If
'
'3)출력 Output
Range("D2") = output1
Range("E2") = output2
'
End Sub

크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by 솔라뷰

2008/10/15 14:13 2008/10/15 14:13
, , ,
Response
No Trackback , No Comment
RSS :
http://www.solarview.net/rss/response/203

macro와 vba

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

출처 : Katsuyuki Watanabe et al, 감춰놓고 혼자보는 엑셀비밀노트 970, p.652
크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by 솔라뷰

2008/09/15 18:22 2008/09/15 18:22
,
Response
No Trackback , No Comment
RSS :
http://www.solarview.net/rss/response/199

PERT/CPM를 위한 엑셀

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

엑셀 프로그램의 특징

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

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

프로그램 설명

사용자 삽입 이미지

VBA4CPM.xls

CPM을 위한 엑셀

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

크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by 솔라뷰

2007/04/13 14:06 2007/04/13 14:06
, , , , , ,
Response
No Trackback , 5 Comments
RSS :
http://www.solarview.net/rss/response/127