• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:数値かどうかを取得したい IsNumberではダメ)

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

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

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

  • ベストアンサー
回答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