2014-05-09 3 views
0
Excel 도움말에서 예를 아래

VBA Log 기능에 대해, 표기 number# 소수점 데이터 타입으로 number의 전환을하게하지만 인수로 10 대신 10# 걸리는 경우 그것을 Log 기능에 대한 차이 ?로그() 행동과 번호 # 표기법은

Static Function Log10(X) 

    Log10 = Log(X)/Log(10#) 

End Function 
+0

아무런 차이가 없어야한다고 생각합니다. 대신에'Application.Log10()'(워크 시트 함수) –

답변

1

왜 차이가 발생하지 않는지 설명하려면 VBA에서 형식 변환이 어떻게 처리되는지 설명해야합니다. 기본 유형으로 VBA에서

, 그것은 날짜에 관해서 (시스템 로케일 비트가 의미가 시스템 로케일을 기반으로 기본 변환을 사용하여, 암시가는 기능/동작에서 요구하는 형식으로 변환 할 것을 시도하고, 숫자를 문자열로 숫자 형식으로 변환하거나 그 반대로).

고려 :

Dim aNumber As Integer, aString As String 
aString = 1 & 2 
aNumber = aString 
aNumber = aString + 1 
MsgBox aNumber 

을 상기에서, 숫자 1과 2는 암시 적으로 문자열로 변환됩니다. 정수형을 다룰 때 시스템 로케일은 중요하지 않으므로, 이후에 aString은 "12"를 저장합니다. 숫자에 문자열을 할당하면 문자열이 암시 적으로 숫자로 변환되므로 결과적으로 aNumber는 12가되고 추가 된 후 13이됩니다. 숫자가 발생합니다 숫자를 전달있는 MsgBox를 호출하는 것은 전에 문자열 로 변환되고이 전달됩니다. 위의 Option Strict 지침을 가지고 VB에서와 달리, VBA 비활성화 할 수 없습니다와 같은

암시 적 형식 변환.

위의 Log 질문에 대해 전달 된 정수 유형은 실제로 전달되기 전에 암시 적으로 double로 변환됩니다. 예를 들어 전달 중입니다. 10#10은 변환을 저장하지만 (완전히 관련없는 성능 고려 사항) 그렇지 않으면 의미 상 동등합니다.