VBA(マクロ)の知って得ワザ vol. 3

小数点を扱うデータは要注意!

今回は変数の型 「Singe」と「Double」の使い分けについて説明します


小数点を扱う変数の型には「Single」と「Double」があります


一般的に

  • Single:有効数字約7桁
  • Double:有効数字約15桁

とあるので、余程のことが無い限り「Single」で十分のように思われますが、実際どうなのか?検証してみたいと思います

本ページにはプロモーションが含まれています

サンプルデータ

サンプルデータはVBA(マクロ)の知って得ワザ vol. 2と同じデータを使用します


比べてみよう!

例文1

Sub test1()

Dim myMax As Single

Dim myAns As Single

Dim myScope As Range


myAns = Range("B4").Value

MsgBox "変数の型がSingleでは:" & myAns & "gです"


Set myScope = Range("A2:A6")

myMax = Application. _

WorksheetFunction.Max(myScope)


myAns = myScope.Find(myMax). _

Offset(0, 1).Value

MsgBox "Singleで求める重量は" & myAns & "gです"

End Sub


解説1

  • 1行目:最高温度を入れる変数をmyMaxにします

  • 2行目:最高温度時の重量を入れる変数をmyAnsにします

  • 3行目:検索範囲を入れる変数をmyScopeにします

  • 4行目:myAnsにB4セルの値を入れます

  • 5行目:myAnsの値を確認します

  • 6行目:myScopeの範囲をA列2行目からA列6行目にします

  • 7行目:検索範囲の最大値をmyMaxに入れます

  • 8行目:Findで見つけた最大値のセルの右横の値をmyAnsに入れます

  • 9行目:メッセージBoxで最高温度時の重量(myAns)を確認します
  • 実行時エラーが発生しました

では変数の型をDoubleに変えた場合はどうでしょうか?


例文2

Sub test2()

Dim myMax As Double

Dim myAns As Double

Dim myScope As Range


myAns = Range("B4").Value

MsgBox "変数の型がDoubleでは:" & myAns & "gです"


Set myScope = Range("A2:A6")

myMax = Application. _

WorksheetFunction.Max(myScope)


myAns = myScope.Find(myMax). _

Offset(0, 1).Value

MsgBox "Doubleで求める重量は" & myAns & "gです"

End Sub


解説2

  • 1行目~2行目:変数の型をSingle ⇒ Doubleにします

  • 3行目~4行目:解説1と同じです

  • 5行目:myAnsの値を確認します

  • 6行目~8行目:解説1と同じです

  • 9行目:メッセージBoxで最高温度時の重量(myAns)を確認します
  • こちらは例文1と違い、メッセージBoxが表示されました


別の方法で再度確認する

Findメソッドが悪さをしているのではないか?と考える人もいると思うので、同じく検索時によく使うVlookup関数で確認してみます


サンプルデータはVBA(マクロ)の知って得ワザ vol. 2で使った例文1の変数myMaxとmyAns1を「Single」 ⇒ 「Double」に変更しただけです


しかし結果はFindと同じで

エラー番号は違いますが、こちらも実行時エラーが表示されました


検証結果

例文1と例文2の違いは変数の型が「Single」か「Double」かの違いだけなので、有効桁数に関係なく小数点を扱う場合は「Double」を使った方が良いという結論に至りました


★小数点は「Double」という習慣付けをすることにしました★

コメント