- ベストアンサー
変数の値が数値かどうかを判定する方法
- IsNumber関数を使用して変数の値が数値かどうかを判定することができます。
- ただし、IsNumber関数は文字列が数値に変換可能な場合もTrueを返すため、厳密に数値の判定をする場合には追加の処理が必要です。
- 数値かどうかを判定する場合には、IsNumeric関数を使用するとより正確な結果が得られます。IsNumeric関数は文字列が数値に変換できる場合にTrueを返し、それ以外の場合にはFalseを返します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 これは初歩的なことではあっても、最初はなかなか手こずります。こういうことは、教えもらったほうが早いようです。 #2さんのおっしゃる通り、IsNumberは、ワークシート関数ですから、VBA上での使い方はお分かりになるとは思いますが、しかし、私は、VBAでは、IsNumber は使いません。 ただし、Cells のText プロパティでも同じ反応ですが、String型のデフォルト値は、""(長さ0の文字列)です。基本的には、String型で値を取ることはしません。それに、ふつうは、Cellsから直接取り出すことは避けたほがいいです。一端、変数に入れてから、判定させたほうがよいです。ワークシートの数式は、関数に関数を重ねますが、VBAなどの言語では、あまり関数や数式をネストしないほうがよいと言われます。 IsNumeric VBA関数は、少し意味合いが違います。「[数字]かどうか」という判定で、「[数値]かどうか」ではありません。もちろん、以下のようなワークシート関数を応用したコードはあるとは思いますが、これだと、他のVBAやVBでは応用できません。(英語で考えると変ですね。数値というのは、"Numeric"です。数字は、"Figure" です。もしかしたら、名前付けの時に間違えたかもしれません。(^^;) '// Sub Macro3() Dim myVal As Variant Dim myVal2 As Double myVal = "1" If WorksheetFunction.IsNumber(myVal) Then MsgBox myVal2 Else MsgBox "Not Numeric: " & myVal End If End Sub 'VBA関数を使う場合は、上記とはマクロとしての目的が違いますが、このようにします。 'あえて、Double型にしましたが、不要な場合はLong型にしてもよいです。 Sub Macro4() Dim myVal As Variant Dim myVal2 As Double myVal = "1" If IsNumeric(myVal) Then myVal2 = CDbl(myVal) '直接入れるわけにはいかないし、Val関数を使うと丸められてしまう。 MsgBox myVal2 Else MsgBox "Not Numeric: " & myVal End If End Sub '// 'なお、Macro3,4 の Dim mystr As String は myVal As Variant にしました。 'String型なのに、他のものを入れても同じことですから。
その他の回答 (2)
- yama1718
- ベストアンサー率41% (670/1618)
紛らわしいですが、数値かどうか評価する関数は IsNumber:ワークシートで使う関数と、 IsNumeric:マクロ(VBA)で使う関数の2つあります。 この2つは使うところだけでなく入力に対する挙動にも違いがあり、 またセルの .value か .text を対象にするかでも違いがあります。 http://ameblo.jp/sukiti/entry-11325623598.html
お礼
ありがとうございます。
- ninoue
- ベストアンサー率52% (1288/2437)
Visual Basic についての質問でしょうか。 そうでしたら IsNumeric(...) ではないでしょうか。 IsNumber visual basic とサーチしたら次のようになりました。 Showing results for IsNumeric visual basic Search instead for IsNumber visual basic
お礼
ありがとうございます。
お礼
ありがとうございます。