- ベストアンサー
VBで小数点以下を切り捨てる方法
小数点以下の切捨てをしたくて確かFix関数で切り捨てられると聞いたのですが、 Fix(1.8) のような場合、2が返ってきます。 Int関数やRound関数でも同じ事なのですが、 ここで1を戻したい場合どうすればいいのでしょうか? どなたかご回答よろしくお願い致します。 (ちなみにカテゴリーはVBを選択していますが、実際はVBAで開発しています)
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
[イミディエイト] ? 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
その他の回答 (2)
- kiskfry
- ベストアンサー率34% (32/93)
こんにちは。 聞く限りは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 が各値となっています。 再度試して見てください^^
お礼
ご回答ありがとうございました! 分かりやすいたとえで助かります。 まだまだ初心者の為、手違いで関数の使い方を間違っていました(汗) ありがとうございました!
- K-Sogacchi
- ベストアンサー率53% (50/93)
??? Excel2000のVBAで、以下のマクロ実行すると1が表示されますよ? Sub Macro1() MsgBox CStr(Fix(1.8)) End Sub Currency型とかDouble型とかの変数を宣言して、それにFix関数を適用しても 同じでしたが… ちなみにIntとFixでは負の数の処理が違います。 また、「VBAの」Round関数は、切捨てでも四捨五入でもなく、銀行式まるめです。 (ワークシート関数のRoundは四捨五入) もしかしてバージョンによって違ったりするんでしょうか? こんなのがバージョンによって違ったら酷い事になりそうですが…
お礼
ご回答ありがとうございました! 実は関数以前に間違っていた部分がありまして、 (Integerで宣言した変数に代入してからFix関数を使おうとしてました。) マイナス値以前の問題だったみたいです(汗) Integer型に代入すると勝手に四捨五入されてしまうんですね(汗) 初心者丸出しで大変お恥ずかしい限りです…
お礼
早速のご回答ありがとうございました! とても的確なお答えで助かりました。 またの機会がありましたらぜひよろしくお願いします。