匙は投げられた!

鬼に綿棒、針金入りの根性、年齢なんてただの数字だ。

エクセルの危ないところ。

エクセルでは通常はセルの値の数値を小数点以下を四捨五入して表示します「下図」。

 

f:id:hyper_nonti:20190915154619p:plain


 これで困ったのが消費税の計算結果でした、ほとんどのお店では円未満を切り捨てています。

ただし法律では切り上げでも四捨五入でも良いことになっています、過去に一度だけ嫁がまだ消費税率3%だった頃に30円の飴を子供に買い与えたら31円取られたと憤慨していたことがあります。

小遣い帳をつけていてどうしても計算結果が合わないで悩んでいたのです、冒頭に書いたエクセルの仕様に気がつくまでは。

ところが例えば指定範囲は計算結果も切り捨てにしたいとかの設定ができないのです、見かけ上の設定ならばできますが色々と不具合を引きずることになります。

そこで考えたのが以下のマクロです。

Sub 切り捨て()
Dim nH As Range, i As Range
Set nH = Selection
Set i = Application.Intersect(nH, Range("価格"))

  If i Is Nothing Then
    Exit Sub
  ElseIf i = "" Then
    Exit Sub
  Else
    * nH = "=value(" & nH & ")"
    * nH = Fix(nH)
  End If
End Sub

これをデータが入力されたら自動で動くようにイベントにしました。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim nH As Range, i As Range
Set nH = Selection
Set i = Application.Intersect(nH, Range("価格"))

  If i Is Nothing Then
    Exit Sub
  ElseIf i = "" Then
    Exit Sub
  Else
    * nH = "=value(" & nH & ")"
    * nH = Fix(nH)
  End If
End Sub

いちいち「=496*1.08」とセルに入力するのは実は面倒、そこで「496*1.08」とだけ入力すれば計算結果が切り捨てになるようにしました、それが「*」の部分です。

単に「496*1.08」と入力すると文字列になってしまいます、そこでエクセルの「VALUE関数」で数値にしてVBAの「Fix関数」で切り捨てています。

現在のバージョンのエクセルも相変わらずこの辺りは変わってないのでしょうか。