小数点を扱うデータは要注意!
今回は変数の型 「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」という習慣付けをすることにしました★
コメント