数字を扱う変数needtec.sakura.ne.jp/vba/lesson/excelvba002.pdf『0.1を十回足しても1にならない。...
TRANSCRIPT
-
数字を扱う変数
-
整数の型
少数点を含む型
目的
-
整数の型の種類
Byte
Integer
Long
LongLong(64bit版のみ)
-
整数の型の種類
Byte
Integer
Long
LongLong(64bit版のみ)
バイト型 サイズ:1バイト 範囲 0~255
-
整数の型の種類
Byte
Integer
Long
LongLong(64bit版のみ)
長整数型 サイズ:4バイト 範囲 -2,147,483,648~2,147.483,647
-
整数の型の種類
Byte
Integer
Long
LongLong(64bit版のみ)
整数型 サイズ:2バイト 範囲 -32,768~32,767
-
整数の型の種類
Byte
Integer
Long
LongLong(64bit版のみ)
長整数型 サイズ:4バイト 範囲 -2,147,483,648~2,147,483,647
-
整数の型の種類
Byte
Integer
Long
LongLong(64bit版のみ)
多倍長整数型 サイズ:8バイト 範囲 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
-
整数型の使用例
-
整数型の使用例
-
Public Sub TestIntegerDataType()
End Sub
整数型の使用例
-
‘整数型の使用例
Public Sub TestIntegerDataType()
End Sub
整数型の使用例
-
'整数型の使用例
Public Sub TestIntegerDataType()
Dim bytData as Byte
End Sub
整数型の使用例
-
'整数型の使用例
Public Sub TestIntegerDataType()
Dim bytData as Byte
End Sub
整数型の使用例
-
'整数型の使用例
Public Sub TestIntegerDataType()
Dim bytData as Byte
End Sub
整数型の使用例
-
'整数型の使用例
Public Sub TestIntegerDataType()
Dim bytData as Byte
End Sub
整数型の使用例
-
'整数型の使用例
Public Sub TestIntegerDataType()
Dim bytData as Byte
Debug.Print "bytDataの内容:" & bytData
End Sub
整数型の使用例
-
'整数型の使用例
Public Sub TestIntegerDataType()
Dim bytData as Byte
Debug.Print "bytDataの内容:" & bytData
End Sub
整数型の使用例
-
'整数型の使用例
Public Sub TestIntegerDataType()
Dim bytData as Byte
Debug.Print "bytDataの内容:" & bytData
End Sub
整数型の使用例
-
'整数型の使用例
Public Sub TestIntegerDataType()
Dim bytData as Byte
Dim lngData as Long
Debug.Print "bytDataの内容:" & bytData
Debug.Print "lngDataの内容:" & lngData
End Sub
整数型の使用例
-
'整数型の使用例
Public Sub TestIntegerDataType()
Dim bytData as Byte
Dim lngData as Long
Debug.Print "bytDataの内容:" & bytData
Debug.Print "lngDataの内容:" & lngData
End Sub
整数型の使用例
-
'整数型の使用例
Public Sub TestIntegerDataType()
‘ ~ ( 省略 ) ~
bytData = 123
lngData = 8000
Debug.Print “変更後bytDataの内容:" & bytData
Debug.Print "変更後lngDataの内容:" & lngData
End Sub
整数型の使用例
-
'整数型の使用例
Public Sub TestIntegerDataType()
Dim bytData as Byte
Dim lngData as Long
Debug.Print "bytDataの内容:" & bytData
Debug.Print "lngDataの内容:" & lngData
End Sub
整数型の使用例
-
'整数型の使用例
Public Sub TestIntegerDataType()
‘ ~ ( 省略 ) ~
bytData = 110105
lngData = 8000
Debug.Print “変更後bytDataの内容:" & bytData
Debug.Print "変更後lngDataの内容:" & lngData
End Sub
整数型の使用例
-
'整数型の使用例
Public Sub TestIntegerDataType()
‘ ~ ( 省略 ) ~
bytData = 110105
lngData = 8000
Debug.Print “変更後bytDataの内容:" & bytData
Debug.Print "変更後lngDataの内容:" & lngData
End Sub
整数型の使用例
-
小数点を含む型の種類
固定小数点
Currency
浮動小数点
Single
Double
-
小数点を含む型の種類
固定小数点
Currency
浮動小数点
Single
Double
固定小数点とは、ある桁に小数点が固定されている。
計算誤差をしてはいけないときに使う。
-
小数点を含む型の種類
固定小数点
Currency
浮動小数点
Single
Double
浮動小数点は一定の範囲内の誤差で近い数値に近似できる。 極端な数値を扱う分野で使う。
-
小数点を含む型の種類
固定小数点
Currency
浮動小数点
Single
Double
通貨型 サイズ:8バイト 範囲 -922,337,203,685,477.5808 ~922,337,203,685,477.5807
-
小数点を含む型の種類
固定小数点
Currency
浮動小数点
Single
Double
単精度浮動小数点数型 サイズ:4バイト 負の値の範囲 :-3.402823E38 ~ -1.401298E-45 正の値の範囲 :1.401298E-45 ~ 3.402823E38
-
小数点を含む型の種類
固定少数点
Currency
浮動小数点
Single
Double
単精度浮動小数点数型 サイズ:4バイト 負の値の範囲 :-3.402823E38 ~ -1.401298E-45 正の値の範囲 :1.401298E-45 ~ 3.402823E38
1.401298E-45 →1.401298× 10-45
小数点以下がごく細かい
-
小数点を含む型の種類
固定少数点
Currency
浮動小数点
Single
Double
単精度浮動小数点数型 サイズ:4バイト 負の値の範囲 :-3.402823E38 ~ -1.401298E-45 正の値の範囲 :1.401298E-45 ~ 3.402823E38
3.402823E38 →3.402823× 1038
すごく大きい桁
-
小数点を含む型の種類
固定小数点
Currency
浮動小数点
Single
Double
単精度浮動小数点数型 サイズ:4バイト 負の値の範囲 :-3.402823E38 ~ -1.401298E-45 正の値の範囲 :1.401298E-45 ~ 3.402823E38
-
小数点を含む型の種類
固定小数点
Currency
浮動小数点
Single
Double
倍精度浮動小数点数型 サイズ:8バイト 負の値の範囲 :-1.79769313486231E308 E308 ~ -4.94065645841247E-324 正の値の範囲 :4.94065645841247E-324 ~1.79769313486231E308 E308
-
Public Sub TestDoubleDataType()
Dim data As Double
Dim i As Long
data = 0
For i = 1 To 10
data = data + 0.1
Next i
If data = 1 Then
Debug.Print "フフフ計画通り..." & data
Else
Debug.Print "げせぬ..." & data
End If
End Sub
-
Public Sub TestDoubleDataType()
Dim data As Double
Dim i As Long
data = 0
For i = 1 To 10
data = data + 0.1
Next i
If data = 1 Then
Debug.Print "フフフ計画通り..." & data
Else
Debug.Print "げせぬ..." & data
End If
End Sub
-
Public Sub TestDoubleDataType()
Dim data As Double
Dim i As Long
data = 0
For i = 1 To 10
data = data + 0.1
Next i
If data = 1 Then
Debug.Print "フフフ計画通り..." & data
Else
Debug.Print "げせぬ..." & data
End If
End Sub
-
Public Sub TestDoubleDataType()
Dim data As Double
Dim i As Long
data = 0
For i = 1 To 10
data = data + 0.1
Next i
If data = 1 Then
Debug.Print "フフフ計画通り..." & data
Else
Debug.Print "げせぬ..." & data
End If
End Sub
-
Public Sub TestDoubleDataType()
Dim data As Double
Dim i As Long
data = 0
For i = 1 To 10
data = data + 0.1
Next i
If data = 1 Then
Debug.Print "フフフ計画通り..." & data
Else
Debug.Print "げせぬ..." & data
End If
End Sub
-
Public Sub TestDoubleDataType()
Dim data As Double
Dim i As Long
data = 0
For i = 1 To 10
data = data + 0.1
Next i
If data = 1 Then
Debug.Print "フフフ計画通り..." & data
Else
Debug.Print "げせぬ..." & data
End If
End Sub
-
あ…ありのまま今起こったことを話すぜ
『0.1を十回足しても1にならない。
でも表示だけは1のふりをする』
な…なにを言っているのか
わからねーとおもうが、
おれも何をされたかわからなかった…
頭がどうにかなりそうだった…
計算誤差とか
チャチナもんじゃあ 断じてねぇ
もっと恐ろしいものの片鱗を味わったぜ…
-
Public Sub TestDoubleDataType()
Dim data As Double
Dim i As Long
data = 0
For i = 1 To 10
data = data + 0.1
Next i
If data = 1 Then
Debug.Print "フフフ計画通り..." & data
Else
Debug.Print "げせぬ..." & data
End If
End Sub
-
Public Sub TestCurrencyDataType()
Dim data As Currency
Dim i As Long
data = 0
For i = 1 To 10
data = data + 0.1
Next i
If data = 1 Then
Debug.Print "フフフ計画通り..." & data
Else
Debug.Print "げせぬ..." & data
End If
End Sub
-
Public Sub TestCurrencyDataType()
Dim data As Currency
Dim i As Long
data = 0
For i = 1 To 10
data = data + 0.1
Next i
If data = 1 Then
Debug.Print "フフフ計画通り..." & data
Else
Debug.Print "げせぬ..." & data
End If
End Sub
-
整数の型
少数点を含む型
きょう勉強したこと
-
整数の型
少数点を含む型
きょう勉強したこと
-
Interger型さんディスンなよ
バカなの?
アホなの?
ワゴンなの?
質問1
-
質問にかこつけて
神ゲーをディスるとは
汚いな
さすがInteger
汚い
回答1
-
俺はこれでInteger型 嫌いになったな
俺は中立の立場で 見てきたけど、
やはりLong型中心に いったほうがいい事が
判明した
回答1
-
あと、OfficeXP時代の
ドキュメントに
Long型の方がちょっと
効率がいいとあった
これはもう、Long型が
いいのは確定的に明か
回答1
-
The Integer, Long, and Byte Data Types
http://msdn.microsoft.com/en-us/library/aa164754%28office.10%29.aspx
-
Traditionally, VBA programmers have used integers to hold
small numbers, because they required less memory.
The Integer, Long, and Byte Data Types
http://msdn.microsoft.com/en-us/library/aa164754%28office.10%29.aspx
伝統的にVBAプログラマは小さい数を保持してInteger型を使った
なぜならば、(Long型にくらべて)メモリの要求が少なかったからだ。
-
In recent versions, however, VBA converts all integer values
to type Long, even if they are declared as type Integer.
The Integer, Long, and Byte Data Types
http://msdn.microsoft.com/en-us/library/aa164754%28office.10%29.aspx
しかしながら、最近のバージョンでは、VBAはすべての整数
の値をLong型に変換する。たとえそれがInteger型で宣言されて
いたとしてもだ。
-
Therefore, there is no longer a performance advantage to
using Integer variables
The Integer, Long, and Byte Data Types
http://msdn.microsoft.com/en-us/library/aa164754%28office.10%29.aspx
したがってもはやInteger型の宣言にパフォーマンス上の有利は
ない。
-
in fact, Long variables might be slightly faster because VBA
does not have to convert them.
The Integer, Long, and Byte Data Types
http://msdn.microsoft.com/en-us/library/aa164754%28office.10%29.aspx
実際、Long型の変数が多少早いかもしれない。
なぜならVBAがそれらを変換するような必要がないからだ。
-
Integer vs Long パフォーマンステスト
参考:
「VBA性能向上委員会」
Integer型とLong型はどちらを使うべき?
http://www.banana-juice.com/VBA/Performance/Statement/IntLong.html
-
計測方法:
・-32,768~32,767までのループで和、差、積、商、余の計算する。
・これを100回くりかえした時にかかった時間を出力する。
・時間の出力にはTimerを使用する
・以上を1セットとして、これを10セット行う。
・このアルゴリズムはInteger,Long共有である。
このプログラムは今回のサンプル用のワークブックにある。
mdlPerformanceTest. TestPerformance()を参照のこと。
Integer vs Long パフォーマンステスト
-
実験環境:
・実装メモリ(RAM)
4.00GB
・プロセッサ:
Intel® Core™ i5 CPU M450 @2.40GHz 2.40GHz
・OS:
Windows 7 Home Premium
64Bit オペレーティングシステム
・Microsoft Office Home and Business2010
バージョン 14.0.6129.5000 (32ビット)
Integer vs Long パフォーマンステスト
-
(-) Integer(Sec) Long(Sec)
(1) 0.7333984 0.7177734
(2) 0.734375 0.7324219
(3) 0.7490234 0.7333984
(4) 0.7490234 0.7333984
(5) 0.7636719 0.7177734
(6) 0.7490234 0.7333984
(7) 0.7324219 0.71875
(8) 0.7470703 0.734375
(9) 0.7480469 0.734375
(10)0.7480469 0.7333984
(平均) 0.74541015625 0.72890625
Integer vs Long パフォーマンステスト
実行結果:
Long型で
2.2%程度の
速度向上
Long平均 ÷ Integer平均 × 100 ≒97.78%
-
まぁ、Long型さん
まじぱねぇって
ことだ
回答1
-
変数名の制限ってなぁに?
質問2
-
Visual Basic Naming Rules
ってドキュメントに
書いてある
回答2
http://msdn.microsoft.com/en-us/library/office/gg264773%28v=office.14%29.aspx
-
ルール1
最初は文字ではじめる
数字とか記号だめよ
回答2
-
ルール2
次の記号は使わない
スペースと
.!@&$#
回答2
-
ルール3
255文字を超えるな
回答2
-
ルール4
VBA中の
関数や命令と
同じ名前つけない
ほうがいい
回答2
-
ルール5
同じスコープレベル
で同じ名前使うな
回答2
-
あれ?
さっきのルール1で「文字」
っていったよね。
質問3
-
もしかして漢字や平仮名もry
質問3
-
そ、そんな変数名に
漢字や平仮名なんて
使うわけないから
わからないお
回答3
-
常識的に考えて
変数名にそんな物が
設定できるわけないお
回答3
-
数字を扱う変数