삼각함수 비교

삼각함수 비교


설명 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 탄젠트역함수 Atan
Atan2
Atn Atn Atan
Atan2

sinh 하이퍼볼릭사인함수 Sinh - - Sinh
cosh 하이퍼볼릭코사인함수 Cosh - - Cosh
tanh 하이퍼볼릭탄젠트함수 Tanh - - Tanh
arcsinh 하이퍼볼릭사인역함수 Asinh - - -
arccosh 하이퍼볼릭코사인역함수 Acosh - - -
arctanh 하이퍼볼릭탄젠트역함수 Atanh - - -
이상에서 보듯 VB6와 VBA로 프로그래밍을 하고자 하면, 삼각함수의 역함수를 작성해야 한다. 만약 VBA에서 새로 역함수를 작성하지 않고, 엑셀함수를 사용하고자 한다면 다음과 같이 하면 된다.
area = WorksheetFunction.Pi * radius ^ 2
a = WorksheetFunction.Acos(b)
크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by 솔라뷰

2009/05/29 19:13 2009/05/29 19:13
,
Response
No Trackback , No Comment
RSS :
http://www.solarview.net/rss/response/251

파일경로와 파일이름

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

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

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

Public Function AppPath() As String
Dim NewPath As String
NewPath = App.Path
If Right(App.Path, 1) <> "\" Then NewPath = NewPath & "\"
AppPath = NewPath
End Function

사용예
    'Open "C:\IA Program\입력값\FormData_5장.txt" For Input As #1
Open AppPath & "입력값\FormData_5장.txt" For Input As #1


4. 프로그램 시작 경로에서 파일명 가져오기
Function GetFileName(sFileName As String) As String
Dim FullFilename As String
'
'파일이름
If Right$(Trim$(App.Path), 1) = "\" Then
FullFilename = App.Path + sFileName
Else
FullFilename = App.Path + "\" + sFileName
End If
'
GetFileName = FullFilename
'
End Function

사용예 : FormData_5장.txt를 프로그램시작경로에서 찾는다.
myFile = GetFileName("FormData_5장.txt")


5. 전체파일명에서 경로만 뽑아내기
Function GetPath(strFullFilename As String) As String
'
Dim strPath As String
strPath = Mid(strFullFilename, 1, InStrRev(strFullFilename, "\", , vbTextCompare) - 1)
If Len(strPath) = 0 Then
strPath = App.Path
End If
GetPath = strPath
'
End Function


호환성 : Visual Basic 5, 6

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

Posted by 솔라뷰

2008/08/28 14:48 2008/08/28 14:48
, ,
Response
No Trackback , No Comment
RSS :
http://www.solarview.net/rss/response/194

비주얼베이직(VB)에서 마우스 스크롤이 되는 방법

비주얼 베이직 6.0에서 작업을 하다보면 뜻밖에도 이런 것이 안 되다니 하고 느끼는 것이 있다. 바로 마우스의 휠이 먹히지 않는다는 것이다. 마우스로 화면을 스크롤할 수 없다는 것은 정말이지 뜻밖의 복병이다. 윈도우에서 아무런 문제 없이 사용하던 것이 비주얼베이직에만 오면 딱 그 기능이 멎어버린다. (놀라운 MS사의 센스가 아닐 수 없다!)

이 문제를 해결하려고 하면 아래의 파일을 내려받아서 설치하면 간단하게 해결된다.(왜 이것은 VB6에 기본적으로 포함하지 않는 것도 이상하다. 더군다나 패치에서도 해결할 노력이 없다. SP6까지 오면서 개선된 것이 없다. 다행히도 VB.NET에서는 된다.)

1. 아래의 파일을 내려받는다.
(http://download.microsoft.com/download/ ··· heel.exe)

2. 내려 받은 실행 파일을 클릭하여 실행시킨다.
3. 압축을 풀 폴더를 임의로 선택한다. (단, 위치는 기억한다. 그리고 설치 폴더를 지우면 안 된다.)
4. 다음과 같이 명령어를 입력하여 등록한다.
regsvr32 <압축을 푼 폴더>\VB6IDEMouseWheelAddin.dll
등록되었다는 메시지가 나오면  OK버튼을 클릭한다.
5. Visual Basic 6.0를 실행한다.
6. 메뉴에서 '추가기능(Add-Ins)'->추가기능관리자(Add-in Manager)를 선택한다.
7. '사용가능한 추가기능'목록 중에서 'MouseWheel Fix'를 선택한다.
8. '로드 동작'에서 '로드/언로드'항목과 '시작할 때 로드'항목을 체크(선택)한다.
9. '확인' 버튼을 눌러서 종료한다.
크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by 솔라뷰

2007/01/04 22:58 2007/01/04 22:58
, ,
Response
No Trackback , No Comment
RSS :
http://www.solarview.net/rss/response/107

동적 메모리 할당 ReDim에 관하여

처리해야 할 정보의 양에 맞게 변수를 선언하는 것이 프로그래밍의 기본이다.
그러나, 프로그램을 작성하다보면 처리해야 할 정보의 양이 고정되어 있지 않고 상황에 따라 변하는 경우를 자주 만나게 된다. 그렇다면 정보량이 변하는 경우는 어떻게 변수를 선언하고 관리할 것인가?
비주얼베이직에서는 정보량 변화를 수용하기 위하여 변수 크기에 대하여 동적으로 할당할 수 있는 장치를 마련하였다. 그것이 바로 ReDim이다.

그 사용법을 보면 다음과 같다.
1) 최초 변수를 선언할 때, 그 크기를 비워둔다.
Dim Data() As Single

보통 배열을 선언할 때, 그 크기를 "1 To 10"과 같이 그 크기를 명시하지만, 여기서는 크기를 비워두는 것이 핵심이다.

2) 상황에 따라 배열의 크기를 설정한다.
ReDim Data(10) As Single
.....
ReDim Preserve Data(100) As Single
ReDim Preserve Data(NumberOfData) As Single


상황에 따라 10개가 필요하면 10을 100개가 필요하면 100을, 아니면 특정 변수만큼 필요하면 해당 변수(여기서는 NumberOfData)를 넣어서 그 크기만큼 변수를 만들 수 있다.

이 방법을 사용하는 데 있어서 유의할 것도 있다.
1) 프로그램의 속도가 느려진다.
특히 ReDim을 루프와 같이 반복 계산되는 곳에 두면 프로그램의 속도는 눈에 띄게 느리게 될 것이다. 따라서, 변수의 양이 루프 밖에서도 알 수 있다면 꼭 밖에 두는 것이 현명한 처사이다.

2) 다차원배열의 동적할당
다차원 배열의 동적할당에 있어서는 맨마지막 차원에 대해서만 적용된 것을 명심하자.
Dim MultiData() As Single
....
ReDim MultiData(NumberOfData,3,4) As Single
ReDim MultiData(NumberOfData+1,3,4) As Single '=> 오류발생

ReDim MultiData(3,4,NumberOfData) As Single
ReDim MultiData(3,4,NumberOfData+1) As Single '=> 정상작동

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

Posted by 솔라뷰

2007/01/03 20:24 2007/01/03 20:24
, , , ,
Response
No Trackback , No Comment
RSS :
http://www.solarview.net/rss/response/105