• ベストアンサー

VBで小数点以下を切り捨てる方法

小数点以下の切捨てをしたくて確かFix関数で切り捨てられると聞いたのですが、 Fix(1.8) のような場合、2が返ってきます。 Int関数やRound関数でも同じ事なのですが、 ここで1を戻したい場合どうすればいいのでしょうか? どなたかご回答よろしくお願い致します。 (ちなみにカテゴリーはVBを選択していますが、実際はVBAで開発しています)

質問者が選んだベストアンサー

  • ベストアンサー
noname#140971
noname#140971
回答No.1

[イミディエイト] ? Rounds(1.8, 切り捨て) 1 ? Rounds(-1.8, 切り捨て) -1 ? Rounds(-1.811, 切り捨て, 2) -1.81 Public Const 四捨五入 = 0 Public Const 切り捨て = 1 Public Const 切り上げ = 2 Public Function Rounds(ByVal M As Currency, _             ByVal A As Integer, _             Optional D As Integer = 0) As Variant     Rounds = Sgn(M) * Fix(Abs(M) * 10 ^ D + Abs((A = 0) * 0.5@ + (A = 2) * (Int(M * 10 ^ D) <> (M * 10 ^ D)))) / 10 ^ D End Function つまり、Sgn関数とFix関数とAbs関数とを組み合わせれば良いと思います。 [イミディエイト] ? Sgn(1.8)*Fix(Abs(1.8)) 1 ? Sgn(-1.8)*Fix(ABS(-1.8)) -1

noname#169207
質問者

お礼

早速のご回答ありがとうございました! とても的確なお答えで助かりました。 またの機会がありましたらぜひよろしくお願いします。

その他の回答 (2)

  • kiskfry
  • ベストアンサー率34% (32/93)
回答No.3

こんにちは。 聞く限りはINTかFIX共に可能のはずです。 いま、EXCEL2000環境のVBAで確認しましたが 例えば X=1.8 Y=-1.8 A=INT(X) B=INT(Y) C=FIX(X) D=FIX(Y) とすれば A=1 B=-2 C=1 D=-1 が各値となっています。 再度試して見てください^^

noname#169207
質問者

お礼

ご回答ありがとうございました! 分かりやすいたとえで助かります。 まだまだ初心者の為、手違いで関数の使い方を間違っていました(汗) ありがとうございました!

回答No.2

??? Excel2000のVBAで、以下のマクロ実行すると1が表示されますよ? Sub Macro1() MsgBox CStr(Fix(1.8)) End Sub Currency型とかDouble型とかの変数を宣言して、それにFix関数を適用しても 同じでしたが… ちなみにIntとFixでは負の数の処理が違います。 また、「VBAの」Round関数は、切捨てでも四捨五入でもなく、銀行式まるめです。 (ワークシート関数のRoundは四捨五入) もしかしてバージョンによって違ったりするんでしょうか? こんなのがバージョンによって違ったら酷い事になりそうですが…

参考URL:
http://support.microsoft.com/kb/225330/ja
noname#169207
質問者

お礼

ご回答ありがとうございました! 実は関数以前に間違っていた部分がありまして、 (Integerで宣言した変数に代入してからFix関数を使おうとしてました。) マイナス値以前の問題だったみたいです(汗) Integer型に代入すると勝手に四捨五入されてしまうんですね(汗) 初心者丸出しで大変お恥ずかしい限りです…

関連するQ&A