エクセルでの処理を他の言語などに移植するとき、キャスト・四捨五入・切り捨てなどの動作が異るため、計算結果にずれが生じてしまう。
エクセルの各丸め処理の違いを把握しやすいよう、比較できるマクロを記述してみた。
丸め処理の種類についてはwikipediaに詳しく記述されている
https://ja.wikipedia.org/w/index.php?title=%E7%AB%AF%E6%95%B0%E5%87%A6%E7%90%86&redirect=no
Excel VBAのキャスト比較 | |||||||
---|---|---|---|---|---|---|---|
キャスト前 | 暗黙のキャスト | Int() | Round() | Worksheet Function. Round() | Worksheet Function. RoundDown() | Worksheet Function. RoundUp() | CLng() |
最近接偶数への丸め(負数は絶対値について) | 負の無限大への丸め | 最近接偶数への丸め(負数は絶対値について) | 四捨五入 | 0への丸め | 無限大への丸め | 最近接偶数への丸め(負数は絶対値について) | |
-10 | -10 | -10 | -10 | -10 | -10 | -10 | -10 |
-9.9 | -10 | -10 | -10 | -10 | -9 | -10 | -10 |
-9.8 | -10 | -10 | -10 | -10 | -9 | -10 | -10 |
-9.7 | -10 | -10 | -10 | -10 | -9 | -10 | -10 |
-9.6 | -10 | -10 | -10 | -10 | -9 | -10 | -10 |
-9.5 | -10 | -10 | -10 | -10 | -9 | -10 | -10 |
-9.4 | -9 | -10 | -9 | -9 | -9 | -10 | -9 |
-9.3 | -9 | -10 | -9 | -9 | -9 | -10 | -9 |
-9.2 | -9 | -10 | -9 | -9 | -9 | -10 | -9 |
-9.1 | -9 | -10 | -9 | -9 | -9 | -10 | -9 |
-9 | -9 | -9 | -9 | -9 | -9 | -9 | -9 |
-8.9 | -9 | -9 | -9 | -9 | -8 | -9 | -9 |
-8.8 | -9 | -9 | -9 | -9 | -8 | -9 | -9 |
-8.7 | -9 | -9 | -9 | -9 | -8 | -9 | -9 |
-8.6 | -9 | -9 | -9 | -9 | -8 | -9 | -9 |
-8.5 | -8 | -9 | -8 | -9 | -8 | -9 | -8 |
-8.4 | -8 | -9 | -8 | -8 | -8 | -9 | -8 |
-8.3 | -8 | -9 | -8 | -8 | -8 | -9 | -8 |
-8.2 | -8 | -9 | -8 | -8 | -8 | -9 | -8 |
-8.1 | -8 | -9 | -8 | -8 | -8 | -9 | -8 |
-8 | -8 | -8 | -8 | -8 | -8 | -8 | -8 |
-7.9 | -8 | -8 | -8 | -8 | -7 | -8 | -8 |
-7.8 | -8 | -8 | -8 | -8 | -7 | -8 | -8 |
-7.7 | -8 | -8 | -8 | -8 | -7 | -8 | -8 |
-7.6 | -8 | -8 | -8 | -8 | -7 | -8 | -8 |
-7.5 | -8 | -8 | -8 | -8 | -7 | -8 | -8 |
-7.4 | -7 | -8 | -7 | -7 | -7 | -8 | -7 |
-7.3 | -7 | -8 | -7 | -7 | -7 | -8 | -7 |
-7.2 | -7 | -8 | -7 | -7 | -7 | -8 | -7 |
-7.1 | -7 | -8 | -7 | -7 | -7 | -8 | -7 |
-7 | -7 | -7 | -7 | -7 | -7 | -7 | -7 |
-6.9 | -7 | -7 | -7 | -7 | -6 | -7 | -7 |
-6.8 | -7 | -7 | -7 | -7 | -6 | -7 | -7 |
-6.7 | -7 | -7 | -7 | -7 | -6 | -7 | -7 |
-6.6 | -7 | -7 | -7 | -7 | -6 | -7 | -7 |
-6.5 | -6 | -7 | -6 | -7 | -6 | -7 | -6 |
-6.4 | -6 | -7 | -6 | -6 | -6 | -7 | -6 |
-6.3 | -6 | -7 | -6 | -6 | -6 | -7 | -6 |
-6.2 | -6 | -7 | -6 | -6 | -6 | -7 | -6 |
-6.1 | -6 | -7 | -6 | -6 | -6 | -7 | -6 |
-6 | -6 | -6 | -6 | -6 | -6 | -6 | -6 |
-5.9 | -6 | -6 | -6 | -6 | -5 | -6 | -6 |
-5.8 | -6 | -6 | -6 | -6 | -5 | -6 | -6 |
-5.7 | -6 | -6 | -6 | -6 | -5 | -6 | -6 |
-5.6 | -6 | -6 | -6 | -6 | -5 | -6 | -6 |
-5.5 | -6 | -6 | -6 | -6 | -5 | -6 | -6 |
-5.4 | -5 | -6 | -5 | -5 | -5 | -6 | -5 |
-5.3 | -5 | -6 | -5 | -5 | -5 | -6 | -5 |
-5.2 | -5 | -6 | -5 | -5 | -5 | -6 | -5 |
-5.1 | -5 | -6 | -5 | -5 | -5 | -6 | -5 |
-5 | -5 | -5 | -5 | -5 | -5 | -5 | -5 |
-4.9 | -5 | -5 | -5 | -5 | -4 | -5 | -5 |
-4.8 | -5 | -5 | -5 | -5 | -4 | -5 | -5 |
-4.7 | -5 | -5 | -5 | -5 | -4 | -5 | -5 |
-4.6 | -5 | -5 | -5 | -5 | -4 | -5 | -5 |
-4.5 | -4 | -5 | -4 | -5 | -4 | -5 | -4 |
-4.4 | -4 | -5 | -4 | -4 | -4 | -5 | -4 |
-4.3 | -4 | -5 | -4 | -4 | -4 | -5 | -4 |
-4.2 | -4 | -5 | -4 | -4 | -4 | -5 | -4 |
-4.1 | -4 | -5 | -4 | -4 | -4 | -5 | -4 |
-4 | -4 | -4 | -4 | -4 | -4 | -4 | -4 |
-3.9 | -4 | -4 | -4 | -4 | -3 | -4 | -4 |
-3.8 | -4 | -4 | -4 | -4 | -3 | -4 | -4 |
-3.7 | -4 | -4 | -4 | -4 | -3 | -4 | -4 |
-3.6 | -4 | -4 | -4 | -4 | -3 | -4 | -4 |
-3.5 | -4 | -4 | -4 | -4 | -3 | -4 | -4 |
-3.4 | -3 | -4 | -3 | -3 | -3 | -4 | -3 |
-3.3 | -3 | -4 | -3 | -3 | -3 | -4 | -3 |
-3.2 | -3 | -4 | -3 | -3 | -3 | -4 | -3 |
-3.1 | -3 | -4 | -3 | -3 | -3 | -4 | -3 |
-3 | -3 | -3 | -3 | -3 | -3 | -3 | -3 |
-2.9 | -3 | -3 | -3 | -3 | -2 | -3 | -3 |
-2.8 | -3 | -3 | -3 | -3 | -2 | -3 | -3 |
-2.7 | -3 | -3 | -3 | -3 | -2 | -3 | -3 |
-2.6 | -3 | -3 | -3 | -3 | -2 | -3 | -3 |
-2.5 | -2 | -3 | -2 | -3 | -2 | -3 | -2 |
-2.4 | -2 | -3 | -2 | -2 | -2 | -3 | -2 |
-2.3 | -2 | -3 | -2 | -2 | -2 | -3 | -2 |
-2.2 | -2 | -3 | -2 | -2 | -2 | -3 | -2 |
-2.1 | -2 | -3 | -2 | -2 | -2 | -3 | -2 |
-2 | -2 | -2 | -2 | -2 | -2 | -2 | -2 |
-1.9 | -2 | -2 | -2 | -2 | -1 | -2 | -2 |
-1.8 | -2 | -2 | -2 | -2 | -1 | -2 | -2 |
-1.7 | -2 | -2 | -2 | -2 | -1 | -2 | -2 |
-1.6 | -2 | -2 | -2 | -2 | -1 | -2 | -2 |
-1.5 | -2 | -2 | -2 | -2 | -1 | -2 | -2 |
-1.4 | -1 | -2 | -1 | -1 | -1 | -2 | -1 |
-1.3 | -1 | -2 | -1 | -1 | -1 | -2 | -1 |
-1.2 | -1 | -2 | -1 | -1 | -1 | -2 | -1 |
-1.1 | -1 | -2 | -1 | -1 | -1 | -2 | -1 |
-1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 |
-0.9 | -1 | -1 | -1 | -1 | 0 | -1 | -1 |
-0.8 | -1 | -1 | -1 | -1 | 0 | -1 | -1 |
-0.7 | -1 | -1 | -1 | -1 | 0 | -1 | -1 |
-0.6 | -1 | -1 | -1 | -1 | 0 | -1 | -1 |
-0.5 | 0 | -1 | 0 | -1 | 0 | -1 | 0 |
-0.4 | 0 | -1 | 0 | 0 | 0 | -1 | 0 |
-0.3 | 0 | -1 | 0 | 0 | 0 | -1 | 0 |
-0.2 | 0 | -1 | 0 | 0 | 0 | -1 | 0 |
-0.1 | 0 | -1 | 0 | 0 | 0 | -1 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0.1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
0.2 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
0.3 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
0.4 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
0.5 | 0 | 0 | 0 | 1 | 0 | 1 | 0 |
0.6 | 1 | 0 | 1 | 1 | 0 | 1 | 1 |
0.7 | 1 | 0 | 1 | 1 | 0 | 1 | 1 |
0.8 | 1 | 0 | 1 | 1 | 0 | 1 | 1 |
0.9 | 1 | 0 | 1 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
1.1 | 1 | 1 | 1 | 1 | 1 | 2 | 1 |
1.2 | 1 | 1 | 1 | 1 | 1 | 2 | 1 |
1.3 | 1 | 1 | 1 | 1 | 1 | 2 | 1 |
1.4 | 1 | 1 | 1 | 1 | 1 | 2 | 1 |
1.5 | 2 | 1 | 2 | 2 | 1 | 2 | 2 |
1.6 | 2 | 1 | 2 | 2 | 1 | 2 | 2 |
1.7 | 2 | 1 | 2 | 2 | 1 | 2 | 2 |
1.8 | 2 | 1 | 2 | 2 | 1 | 2 | 2 |
1.9 | 2 | 1 | 2 | 2 | 1 | 2 | 2 |
2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 |
2.1 | 2 | 2 | 2 | 2 | 2 | 3 | 2 |
2.2 | 2 | 2 | 2 | 2 | 2 | 3 | 2 |
2.3 | 2 | 2 | 2 | 2 | 2 | 3 | 2 |
2.4 | 2 | 2 | 2 | 2 | 2 | 3 | 2 |
2.5 | 2 | 2 | 2 | 3 | 2 | 3 | 2 |
2.6 | 3 | 2 | 3 | 3 | 2 | 3 | 3 |
2.7 | 3 | 2 | 3 | 3 | 2 | 3 | 3 |
2.8 | 3 | 2 | 3 | 3 | 2 | 3 | 3 |
2.9 | 3 | 2 | 3 | 3 | 2 | 3 | 3 |
3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
3.1 | 3 | 3 | 3 | 3 | 3 | 4 | 3 |
3.2 | 3 | 3 | 3 | 3 | 3 | 4 | 3 |
3.3 | 3 | 3 | 3 | 3 | 3 | 4 | 3 |
3.4 | 3 | 3 | 3 | 3 | 3 | 4 | 3 |
3.5 | 4 | 3 | 4 | 4 | 3 | 4 | 4 |
3.6 | 4 | 3 | 4 | 4 | 3 | 4 | 4 |
3.7 | 4 | 3 | 4 | 4 | 3 | 4 | 4 |
3.8 | 4 | 3 | 4 | 4 | 3 | 4 | 4 |
3.9 | 4 | 3 | 4 | 4 | 3 | 4 | 4 |
4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 |
4.1 | 4 | 4 | 4 | 4 | 4 | 5 | 4 |
4.2 | 4 | 4 | 4 | 4 | 4 | 5 | 4 |
4.3 | 4 | 4 | 4 | 4 | 4 | 5 | 4 |
4.4 | 4 | 4 | 4 | 4 | 4 | 5 | 4 |
4.5 | 4 | 4 | 4 | 5 | 4 | 5 | 4 |
4.6 | 5 | 4 | 5 | 5 | 4 | 5 | 5 |
4.7 | 5 | 4 | 5 | 5 | 4 | 5 | 5 |
4.8 | 5 | 4 | 5 | 5 | 4 | 5 | 5 |
4.9 | 5 | 4 | 5 | 5 | 4 | 5 | 5 |
5 | 5 | 5 | 5 | 5 | 5 | 5 | 5 |
5.1 | 5 | 5 | 5 | 5 | 5 | 6 | 5 |
5.2 | 5 | 5 | 5 | 5 | 5 | 6 | 5 |
5.3 | 5 | 5 | 5 | 5 | 5 | 6 | 5 |
5.4 | 5 | 5 | 5 | 5 | 5 | 6 | 5 |
5.5 | 6 | 5 | 6 | 6 | 5 | 6 | 6 |
5.6 | 6 | 5 | 6 | 6 | 5 | 6 | 6 |
5.7 | 6 | 5 | 6 | 6 | 5 | 6 | 6 |
5.8 | 6 | 5 | 6 | 6 | 5 | 6 | 6 |
5.9 | 6 | 5 | 6 | 6 | 5 | 6 | 6 |
6 | 6 | 6 | 6 | 6 | 6 | 6 | 6 |
6.1 | 6 | 6 | 6 | 6 | 6 | 7 | 6 |
6.2 | 6 | 6 | 6 | 6 | 6 | 7 | 6 |
6.3 | 6 | 6 | 6 | 6 | 6 | 7 | 6 |
6.4 | 6 | 6 | 6 | 6 | 6 | 7 | 6 |
6.5 | 6 | 6 | 6 | 7 | 6 | 7 | 6 |
6.6 | 7 | 6 | 7 | 7 | 6 | 7 | 7 |
6.7 | 7 | 6 | 7 | 7 | 6 | 7 | 7 |
6.8 | 7 | 6 | 7 | 7 | 6 | 7 | 7 |
6.9 | 7 | 6 | 7 | 7 | 6 | 7 | 7 |
7 | 7 | 7 | 7 | 7 | 7 | 7 | 7 |
7.1 | 7 | 7 | 7 | 7 | 7 | 8 | 7 |
7.2 | 7 | 7 | 7 | 7 | 7 | 8 | 7 |
7.3 | 7 | 7 | 7 | 7 | 7 | 8 | 7 |
7.4 | 7 | 7 | 7 | 7 | 7 | 8 | 7 |
7.5 | 8 | 7 | 8 | 8 | 7 | 8 | 8 |
7.6 | 8 | 7 | 8 | 8 | 7 | 8 | 8 |
7.7 | 8 | 7 | 8 | 8 | 7 | 8 | 8 |
7.8 | 8 | 7 | 8 | 8 | 7 | 8 | 8 |
7.9 | 8 | 7 | 8 | 8 | 7 | 8 | 8 |
8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 |
8.1 | 8 | 8 | 8 | 8 | 8 | 9 | 8 |
8.2 | 8 | 8 | 8 | 8 | 8 | 9 | 8 |
8.3 | 8 | 8 | 8 | 8 | 8 | 9 | 8 |
8.4 | 8 | 8 | 8 | 8 | 8 | 9 | 8 |
8.5 | 8 | 8 | 8 | 9 | 8 | 9 | 8 |
8.6 | 9 | 8 | 9 | 9 | 8 | 9 | 9 |
8.7 | 9 | 8 | 9 | 9 | 8 | 9 | 9 |
8.8 | 9 | 8 | 9 | 9 | 8 | 9 | 9 |
8.9 | 9 | 8 | 9 | 9 | 8 | 9 | 9 |
9 | 9 | 9 | 9 | 9 | 9 | 9 | 9 |
9.1 | 9 | 9 | 9 | 9 | 9 | 10 | 9 |
9.2 | 9 | 9 | 9 | 9 | 9 | 10 | 9 |
9.3 | 9 | 9 | 9 | 9 | 9 | 10 | 9 |
9.4 | 9 | 9 | 9 | 9 | 9 | 10 | 9 |
9.5 | 10 | 9 | 10 | 10 | 9 | 10 | 10 |
9.6 | 10 | 9 | 10 | 10 | 9 | 10 | 10 |
9.7 | 10 | 9 | 10 | 10 | 9 | 10 | 10 |
9.8 | 10 | 9 | 10 | 10 | 9 | 10 | 10 |
9.9 | 10 | 9 | 10 | 10 | 9 | 10 | 10 |
10 | 10 | 10 | 10 | 10 | 10 | 10 | 10 |
Sub marume_test()
Dim seisuu As Long
Dim shousuu As Double
Dim i As Double
Dim double_to_long_address As String
Dim item_name_address As String
Dim round_kind_address As String
Dim results_address As String
double_to_long_address = Cells(1, 1).Address
item_name_address = Range(double_to_long_address).Cells(2, 1).Address
round_kind_address = Range(double_to_long_address).Cells(3, 1).Address
results_address = Range(double_to_long_address).Cells(4, 1).Address
Range(double_to_long_address).Value = "Excel VBAのキャスト比較"
Range(item_name_address).Cells(1, 1).Value = "キャスト前"
Range(item_name_address).Cells(1, 2).Value = "暗黙のキャスト"
Range(round_kind_address).Cells(1, 2).Value = "最近接偶数への丸め(負数は絶対値について)"
Range(item_name_address).Cells(1, 3).Value = "Int()"
Range(round_kind_address).Cells(1, 3).Value = "負の無限大への丸め"
Range(item_name_address).Cells(1, 4).Value = "Round()"
Range(round_kind_address).Cells(1, 4).Value = "最近接偶数への丸め(負数は絶対値について)"
Range(item_name_address).Cells(1, 5).Value = "WorksheetFunction.Round()"
Range(round_kind_address).Cells(1, 5).Value = "四捨五入"
Range(item_name_address).Cells(1, 6).Value = "WorksheetFunction.RoundDown()"
Range(round_kind_address).Cells(1, 6).Value = "0への丸め"
Range(item_name_address).Cells(1, 7).Value = "WorksheetFunction.RoundUp()"
Range(round_kind_address).Cells(1, 7).Value = "無限大への丸め"
Range(item_name_address).Cells(1, 8).Value = "CLng()"
Range(round_kind_address).Cells(1, 8).Value = "最近接偶数への丸め(負数は絶対値について)"
For i = 0 To 200
shousuu = (i / 10) - 10
Range(results_address).Cells(i + 1, 1).Value = shousuu
seisuu = shousuu
Range(results_address).Cells(i + 1, 2).Value = seisuu
seisuu = Int(shousuu)
Range(results_address).Cells(i + 1, 3).Value = seisuu
seisuu = Round(shousuu, 0)
Range(results_address).Cells(i + 1, 4).Value = seisuu
seisuu = WorksheetFunction.Round(shousuu, 0)
Range(results_address).Cells(i + 1, 5).Value = seisuu
seisuu = WorksheetFunction.RoundDown(shousuu, 0)
Range(results_address).Cells(i + 1, 6).Value = seisuu
seisuu = WorksheetFunction.RoundUp(shousuu, 0)
Range(results_address).Cells(i + 1, 7).Value = seisuu
seisuu = CLng(shousuu)
Range(results_address).Cells(i + 1, 8).Value = seisuu
Next i
End Sub