|
▼Jakaさん、gigi さん、こんばんは。
>ヘルプでapplicationのobjectを見てみたところ、アプリケーション全体を現すとかかれており、
>なんとなく、「数値かどうか」を判定するだけに使うには、壮大な感じがします。
Excelを開けば存在しているオブジェクトですから、↑こういう受け取り方はしなくてもよいと思いますよ!!
Excel全体を表すオブジェクトから、数値か否かを判定するメソッドを利用する。
もし、自作すればそこそこのステップ数を有する判定プログラムををたった一行でやってくれる道具なのですから・・・。
Application.IsNumberは、ワークシート関数のIsnumber関数をVBAコード内で使用する場合の書式です。
また、VBAの関数にもIsNumericという数値判定の関数があります。
今、セルA1が数値か否かを
1 Application.IsNumber(Range("a1").Value)
2 Application.IsNumber(Range("a1"))
3 IsNumeric(Range("a1").Value)
4 IsNumeric(Range("a1"))
上記の4つの例で試して見ます。
新規ブックの標準モジュールに
'====================================================================
Sub test()
With Range("a1")
.EntireColumn.ColumnWidth = 15
.NumberFormatLocal = "G/標準"
.Value = 100
MsgBox "a1=100 が入力されています"
MsgBox "1 Application.IsNumber(Range(""a1"").Value) =" & _
Application.IsNumber(Range("a1").Value) & vbCrLf & _
"2 Application.IsNumber(Range(""a1"")) = " & _
Application.IsNumber(Range("a1")) & vbCrLf & _
"3 IsNumeric(Range(""a1"").value) = " & _
IsNumeric(Range("a1").Value) & vbCrLf & _
"4 IsNumeric(Range(""a1"")) = " & _
IsNumeric(Range("a1")) & vbCrLf & _
"とセルA1が100の場合はご覧のように全てTrueを返しますが・・・"
.Clear
MsgBox "A1を未入力状態に戻しました"
MsgBox "1 Application.IsNumber(Range(""a1"").Value) =" & _
Application.IsNumber(Range("a1").Value) & vbCrLf & _
"2 Application.IsNumber(Range(""a1"")) = " & _
Application.IsNumber(Range("a1")) & vbCrLf & _
"3 IsNumeric(Range(""a1"").value) = " & _
IsNumeric(Range("a1").Value) & vbCrLf & _
"4 IsNumeric(Range(""a1"")) = " & _
IsNumeric(Range("a1")) & vbCrLf & _
"とセルA1が未入力状態の場合は、1と2は、Falseを返します。" & vbCrLf & _
"つまり、1 と 2は、未入力と数値を区別しています"
.Value = Date
MsgBox "a1=" & Date & " が入力されています"
MsgBox "1 Application.IsNumber(Range(""a1"").Value) =" & _
Application.IsNumber(Range("a1").Value) & vbCrLf & _
"2 Application.IsNumber(Range(""a1"")) = " & _
Application.IsNumber(Range("a1")) & vbCrLf & _
"3 IsNumeric(Range(""a1"").value) = " & _
IsNumeric(Range("a1").Value) & vbCrLf & _
"4 IsNumeric(Range(""a1"")) = " & _
IsNumeric(Range("a1")) & vbCrLf & _
"とセルA1が日付の場合は、2以外は、Falseを返します。" & vbCrLf & _
"つまり、2以外は、日付と数値を区別しています"
MsgBox "上記の結果からは、" & vbCrLf & _
"1の Application.IsNumber(Range(""a1"").Value)が" & vbCrLf & _
"数値判定をより徹底しているということが言えます"
End With
End Sub
上記のtestを実行して、その結果を検討してみてください。
|
|