- ベストアンサー
指定したセルの数値以下になるまで減算を繰り返す方法
お世話になります。VBAの質問です。 仮に、A1=D1÷x、B1=500、C1=A1+B1、D1=2,000のような状況で(雑で申し訳ない)、D1の値を下げ続けることでC1=D1に到達できるものと仮定した場合、C1=D1に到達するまでD1-5を繰り返し、到達した時点の値をF1に表示する、ということは可能でしょうか。 Untilかなとは思うのですが、ループが抜けられず… 頭からお尻までご教示いただけると助かります。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
「A1=D1÷x」という条件の意図が分からないので、純粋にコードの話だけ。 また「到達した時点の値をF1に表示する」の値、というのはループ回数の事でいいですよね? 「C1=D1に到達する」という前提である以上、計算値を出力する事は無意味ですから。 基本的なループ処理で可能です。For nextでも可能ではありますが、まあDo Loopがスマートですね。 下記のコードで可能です。 Sub ループ() Dim C, D, i C = Range("C1").Value D = Range("D1").Value i = 0 Do Until D <= C D = D - 5 i = i + 1 Loop Range("F1").Value = i End Sub 頭からお尻までという事なので一応解説を。 まず変数にセルの値を格納します。これはセルを都度変更するより処理が高速だからです。 Do Untilは条件が満たされるまでループを繰り返しますので、条件として『D <= C』とします。 注意点として、この時『D = C』としてはいけません。元々が「A1=D1÷x、B1=500、C1=A1+B1、D1=2,000」という条件なので、xがC1とD1の差が5の倍数にならないような値の場合、いつまでも条件を満たさないため無限ループしてしまいます。 そのため『D <= C』とする事で、DがCを下回ったら抜けるようにしています。本当はC1とD1の差が5の倍数であるかを事前に確認しておくべきですが、とりあえずシンプルにいきました。 あとは『D = D - 5』で計算を繰り返し、『i = i + 1』でループ回数をカウント、抜けたらF1セルにループ回数を出力します。 ちなみにWhileでも処理できます。そもそも"条件を満たす限り繰り返す" か "条件を満たすまで繰り返す" かの違いなので、単にCとDの以上以下を引っくり返すだけの話です。
お礼