• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:たびたびすいません。VBAです。)

VBAで割り算を行う方法について

このQ&Aのポイント
  • VBAを使って割り算を行う際、整数しか使えないMOD関数や整数専用の割り算記号である¥関数を使用するため、小数点以下の割り算ができない問題があります。
  • この問題を解決する方法として、「割られる数 - (割られる数 ¥ 割る数) * 割る数)」の計算式を使用することが考えられます。しかし、この方法も整数しか使えないため、小数点以下については対応できません。
  • 現在のところ、VBAで小数点以下の割り算を行うためには、FOR文を使用して何度も「割られる数-割る数」を繰り返し計算し、マイナス値が出た時点で終了するという方法が最も適していると言えます。

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

  • ベストアンサー
回答No.2

割り算して、整数値で切り捨てたら? WorksheetFunction.RoundDown( 3.5 / (0.0005) , 0)

kapibaraPG
質問者

お礼

回答ありがとうございます 切り捨てた数値は割り算の商と同じ値でしたね; 目から鱗です・・・ 散々騒がせておいてすいません、この方法を使わせていただきます

その他の回答 (4)

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.5

訂正です Dim x As Double, mx As Double Dim y As Double, my As Double Dim m_str As String x = 1 y = 0.4 m_str = CStr(y) p = Len(m_str) - InStrRev(m_str, ".") mx = 10 ^ p * x my = 10 ^ p * y Debug.Print (mx Mod my) / 10 ^ p

kapibaraPG
質問者

お礼

回答、ありがとうございます この方法なら小数点以下がいくつあっても平気ですね 質問で、具体的なやりたいことを書かなくてすいません; あまりがあるか知りたいだけなので、下の方法を取らせていただきます 別ですが、「InStrRev」という関数初めて知りました これがあれば、ファイルパスの取得が楽になりそうです(今まで左から「¥」を探すという方法を使っていたので) 本当に参考になりましたありがとうございます!

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.4

Dim x As Integer, mx As Integer Dim y As Double, my As Double Dim m_str As String x = 1 y = 0.4 m_str = CStr(y) p = InStrRev(m_str, ".") - 1 mx = 10 ^ p * x my = 10 ^ p * y Debug.Print (mx Mod my) / 10 ^ p とかいかがでしょう

回答No.3

ちょっとやってみたら、 ・割り算 ・切捨て でDouble型にキャストされるために、誤差が出やすいみたいですね。 VBAならCurrency型にこまめに入れてあげると、誤差が出ずらいです。 うーむ。。。微妙だが。。。 サンプルです。 関数名:modもどき '標準モジュールにこれを張る Function modもどき(in割られる方 As Currency, in割る方 As Currency) As Variant Dim l_sng商 As Single l_sng商 = in割られる方 / (in割る方) Dim l_lng商切捨て As Long l_lng商切捨て = WorksheetFunction.RoundDown(l_sng商, 0) Dim l_curWk As Currency l_curWk = l_lng商切捨て * in割る方 modもどき = in割られる方 - l_curWk End Function ↓これをA2のセルに張る =もどき(A1,B1) A1とB1に値を入れる 以上

kapibaraPG
質問者

お礼

色々試していただいてありがとうございます 私の知らないデータ型や、関数(WorkSheet.Functionとか知らなかった)が色々勉強できて参考になりました

  • wkbqp833
  • ベストアンサー率36% (319/886)
回答No.1

まず、具体的に何がしたいのですか?  これでは、説明できません きちんと説明してくれれば、回答しますよ

kapibaraPG
質問者

お礼

補足をしているうちに、自分が知りたかったのはあまりがあるかを調べるだけだと気づきました どんどん丸め誤差に執着してしまって、やりたかった事とだんだん離れていってしまってました; ありがとうございます

kapibaraPG
質問者

補足

もうしわけありません ある数 「A」と「B」があり、AがB刻みであるかを調べるプログラムを作っています Aが3.5、Bが0.5の場合 3.5 / 0.5のあまりが0なので、B刻み、 Aが4.3、Bが0.4の場合 4.3 / 0.4のあまりが10あまり3なのでB刻みではない という風に作りたいと思っていました なので、あまりを求める「MOD」を使おうと思ったら、MOD関数は小数点を丸めてしまうということが前回の質問で分かりました なので、「A - (A ¥ B) * B」で求めようと思ったら、¥も小数点を丸めてしまうという問題があって使えなくなってしまいました それで、質問にある「制限をつける」か「FOR文でまわす」を思いついたのですが、制限はあまりつけたくないし「FOR文でまわす」は時間がかかってしまいそうだったので質問させていただきました

関連するQ&A