- ベストアンサー
セルには何も入ってないのに、数値型になる理由は?
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
追加です、 A2に=ISNUMBER($A$1)といれて(A1以外のセル) A1の値をDeleteキーで消したり、数値、文字を入れて以下のマクロを実行して変化を見てください。 Sub Macro2() If IsNumeric(Range("$A$1")) = True Then Range("B1") = Range("$A$1") MsgBox "数値" Else Range("B1") ="" MsgBox "文字" End If End Sub
その他の回答 (4)
- 374649
- ベストアンサー率38% (203/527)
Excelは表計算です、つまり数値を扱うのが本来の目的です。 何も入力しないで特にInteger,Long,Double,Variante などで定義しなければ”......00000000”となっていると思います。 Excelでは定義はそれほど厳密ではなく関数の戻り値設定で簡単に変わります、 IsNumericは対照セルが数値か否かをtrueかfalseで返すVBAの関数なのでtrueが返ってきて当然です。 IsnumberはExcel関数で普通VBAでは使用しません、何も入ってないセルを参照すればFalseが返りますのでIsnumeric関数でTrueが返ってもFalseが返ります、そのまま”A1”に数値を入れればTrueになります。 Sub Macro2() MsgBox TypeName(Range("a1").Value) End Sub Msgbox関数は[書式] MsgBox (表示文字列 [,ボタン書式] [,タイトル])と定義されているので TypeName(Range("a1").Value)のところは”表示文字列”が入るべきなのでstring型に変換されて返ってきたと思います、それでなければエラーになり実行不可になるはずです。 このような混乱を避けるためVBAでは Dim ** as 型定義 で厳密に設定したほうが良いのです、Excel関数、VBA関数、戻り値の型など知識を深めるともっと面白くなります。
お礼
ありがとうございました。
- mu2011
- ベストアンサー率38% (1910/4994)
>なぜでしょうか? ⇒IsNumeric(Empty)を数値と認識している事から空白=0として数値と認識するみたいです。 因みにISNUMBER関数では数値として認識しない。 MsgBox TypeName(Range("a1").Value)でStringが返る状態ならIsNumericでは数値と 認識しないはずですが不思議です。
お礼
IsNumeric(Empty) は数値として認識するのですか。 知りませんでした。 ありがとうございました。
- mimazoku_2
- ベストアンサー率20% (1905/9111)
「0」が代入されている。 という意味じゃないですか?(それか、ソフト起動時のゴミデータ) 可能なら、 MsgBox "A1には数値が入ってます";a1 として、a1の中身をモニターしましょう。 恐らく、2行目で、IsNumeric が「もし、数値ならば」という問いかけに「数値」という回答を返してるのでは? ごめんなさい、私もエクセルに不慣れです。
お礼
>「0」が代入されている。 という意味じゃないですか? そうかもしれません。納得です。 MsgBox "A1には数値が入ってます";a1 をしたら、エラーになってしまいました。 ご回答ありがとうございます。
回答でなくてすみません。 >"A1には数値が入ってます"が表示されます。 >なぜでしょうか? Excelの設計思想は知りませんが、「数値」である限りは何らかの値であり 「未入力」な場合は数値ゼロを入れる、と決まってるんでしょう多分。 その方が、データタイプが複雑にならず効率的です。 「なぜ」の理由を知り、その後で対策をどうしようかと考えるよりも 「何も入力してない場合はxxと解釈されてる」事実をどう扱うか、という対策を 考えた方が建設的だと思います。
お礼
>「未入力」な場合は数値ゼロを入れる それが原因のようですね。納得しました。ありがとうございました。
お礼
ありがとうございました。