ステートメント制御文の使用例4
使用例4
1より大きい正の数ではその桁数を算出し、1より小さい正の数では
小数点以下第何位に 0 以外の数が初めて現れるかを算出する。

Sub Keta_num()
Dim n As Variant
n = InputBox(Title:="桁数", prompt:="正の数を入力せよ")
If n < 0 Or IsNumeric(n) = False Then
MsgBox "正の数!", 16
Exit Sub
End If
Select Case n
Case Is >= 1
MsgBox Title:="桁数", _
prompt:=n & " は " & Keta(n) & " 桁の数"
Case Is < 1
MsgBox Title:="桁数", _
prompt:=n & " は小数第 " & Keta(n) & " 位" _
& Chr(13) & "に 初めて 0 以外の数"
End Select
End Sub
Function Keta(num As Variant) As Integer
Select Case num
Case Is >= 1
Keta = Int(Log(num) / Log(10#)) + 1
Case Is < 1
Keta = (-1) * Int(Log(num) / Log(10#))
End Select
End Function
' 10^(k-1) < n < 10^k の時、n は k 桁
' この時、両辺の常用対数を考えると
' Log(10^(k-1)) < Log(n) < Log(10^k)
' よって、k-1 < Log(n) < k
' つまり、k = Int(Log(n)) + 1
' 自然対数で書き換えると、k = Int(Log(n) / Log(10)) + 1
' 同様に、10^(-k) < n <10^(-(k-1)) の時、n は
' 小数第 k 位に初めて 0 以外の数字がくる
' 上記と同様に考えて、k = -Int((Log(n) / Log(10)) となる
back top