変数の値が数値かどうかを判定する方法

このQ&Aのポイント
  • IsNumber関数を使用して変数の値が数値かどうかを判定することができます。
  • ただし、IsNumber関数は文字列が数値に変換可能な場合もTrueを返すため、厳密に数値の判定をする場合には追加の処理が必要です。
  • 数値かどうかを判定する場合には、IsNumeric関数を使用するとより正確な結果が得られます。IsNumeric関数は文字列が数値に変換できる場合にTrueを返し、それ以外の場合にはFalseを返します。
回答を見る
  • ベストアンサー

数値かどうかを取得したい IsNumberではダメ

Sub Macro2() Dim mystr As String mystr = "1" If IsDate(mystr) = False Then MsgBox "NO" End If End Sub これなら日付型かどうかを取得できるのに、 Sub Macro1() Dim mystr As String mystr = "1" If IsNumber(mystr) = False Then MsgBox "NO" End If End Sub だと、IsNumberがコンパイルエラーになります。 変数に入っている値が数値として評価できるかを取得する方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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型なのに、他のものを入れても同じことですから。

xevdegbcm
質問者

お礼

ありがとうございます。

その他の回答 (2)

  • yama1718
  • ベストアンサー率41% (670/1618)
回答No.2

紛らわしいですが、数値かどうか評価する関数は IsNumber:ワークシートで使う関数と、 IsNumeric:マクロ(VBA)で使う関数の2つあります。 この2つは使うところだけでなく入力に対する挙動にも違いがあり、 またセルの .value か .text を対象にするかでも違いがあります。 http://ameblo.jp/sukiti/entry-11325623598.html

xevdegbcm
質問者

お礼

ありがとうございます。

  • ninoue
  • ベストアンサー率52% (1288/2437)
回答No.1

Visual Basic についての質問でしょうか。 そうでしたら IsNumeric(...) ではないでしょうか。 IsNumber visual basic とサーチしたら次のようになりました。 Showing results for IsNumeric visual basic Search instead for IsNumber visual basic

xevdegbcm
質問者

お礼

ありがとうございます。

関連するQ&A

  • IsNumberについて

    Sub macro01() If WorksheetFunction.IsNumber(123) = ture Then MsgBox "数値です" End If End Sub WorksheetFunction.IsNumber(123)で、数値なら、MsgBox "数値です"って表示されると思ったのですが、 MsgBox "数値です"を通りません。 123を数値と認識してないのでしょうか?

  • 角カッコが含まれてるかどうかをlikeで取得

    したいのですが、どうやらエラーになるようです。 Sub test() Dim mystr As String mystr = "[test]" If mystr Like "*[*" Then MsgBox "[が含まれます" End If End Sub だと、実行時エラー93 パターン文字列が不正ですになります。 こういうように各カッコが含まれてるかどうかを取得するにはどうすればいいですか?

  • 変数の中身がアルファベットだけなのか取得するには

    変数がアルファベットだけか取得するには? Sub test() Dim mystr As String mystr = "abc" If ??? Then MsgBox "アルファベットだけです" End If End Sub のように、変数の中身がアルファベットだけなのか取得するにはどうすればいいでしょうか? ひらがな、カタカナ、漢字、記号を含んでいるかどうかを評価したいです。

  • VBA 変数にアスタリスクが含んでるかどうか

    変数にアスタリスクが含んでるかどうかをIFステートメントで取得するには? Sub test() Dim mystr As String mystr = "*/" If mystr Like "*" Then MsgBox "mystrはアスタリスクを含んでます。" End If End Sub このようなことをしたい場合、 mystr = "*/" でも mystr = "/" でも、結局は*が、どの文字でも含まれると認識してしまいます。 変数にアスタリスクが含まれてるかどうかを判定する方法を教えてください。

  • セル番地をvbaで探したい

    エクセルのセルに A1→あ B1→い C1→う がはいっています。 この状態で Sub Macro1() Dim mystr1 As String mystr1 = "c1" MsgBox mystr1 & "の値は、" & "です。" End Sub を実行した時に、mystr1のアドレスを探して、msgboxに表示させたいのですが、 どのような方法があるのでしょうか? アドバイスよろしくお願いします。

  • 今日より何日経過しているかを取得するには?

    Sub Macro() Dim dtm日付 As Date dtm日付 = #1/1/2015# If dtm日付 Then MsgBox "何日前です" End If End Sub のように、dtm日付が今日より何日前かを取得する方法はありますか?

  • コードの添削お願いします(変数エラー)

    Option Explicit Private Sub CommandButton1_Click() Dim myStr As String If myStr <> "" Then myStr = TextBox.Value Label1.Caption = LTrim(myStr) Label2.Caption = RTrim(myStr) Label3.Caption = Trim(myStr) Else MsgBox "終了" End If End Sub 変数のエラーが出ますが、何処がおかしいですか? 宜しくお願い致します。

  • 「IsText」の使い方を教えてください

    例えば Sub tset1() Dim mystr As String mystr = "aaa" If IsNumeric(mystr) = True Then MsgBox "数値です" End If If IsText(mystr) = True Then MsgBox "文字です" End If End Sub と言うコードを作ったのですが、 数値かどうかはIsNumericで判断できますが 文字列かどうかを判断したい時にIsStringはないようなのでIsTextを使うのかな? とおもったのですが、コンパイルエラーになるようです。 IsNumericはInformationクラスのようですが IsTextはWorksheetFunctionクラスのようです。 だからIsNumericとIsTextの使い方が違うのでしょうか? 文字かどうか評価するIsTextの使い方をご教授ください。

  • キャンセルボタンをクリックしたかどうかを取得したい

    InputBoxでもしキャンセルボタンが押されたら・・・ってどうやればいいですか? Sub あああ() Dim a As String a = InputBox("文字を入れてください。") MsgBox a End Sub をした時に、キャンセルボタンをクリックしたかどうかを取得したいのですが、どうすればいいんですか? a = InputBox("文字を入れてください。") の次に Cancel = True をいれても vbCancel = True をいれてもエラーになります。 Sub あああ() Dim a As String a = InputBox("文字を入れてください。") If a = "" Then MsgBox "キャンセルが押されました" End If End Sub これだとOKでもキャンセルでもメッセージが表示されます。

  • セルには何も入ってないのに、数値型になる理由は?

    セルに何も入ってない状態で Sub Macro() If IsNumeric(Range("a1").Value) = True Then MsgBox "A1には数値が入ってます" End If End Sub を実行すると、 "A1には数値が入ってます" が表示されます。 なぜでしょうか? Sub Macro2() MsgBox TypeName(Range("a1").Value) End Sub を実行すると、stringが返ってきます。

専門家に質問してみよう