• ベストアンサー

指定したセルの数値以下になるまで減算を繰り返す方法

お世話になります。VBAの質問です。 仮に、A1=D1÷x、B1=500、C1=A1+B1、D1=2,000のような状況で(雑で申し訳ない)、D1の値を下げ続けることでC1=D1に到達できるものと仮定した場合、C1=D1に到達するまでD1-5を繰り返し、到達した時点の値をF1に表示する、ということは可能でしょうか。 Untilかなとは思うのですが、ループが抜けられず… 頭からお尻までご教示いただけると助かります。

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

  • ベストアンサー
  • kon555
  • ベストアンサー率51% (1772/3409)
回答No.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の以上以下を引っくり返すだけの話です。

utayomi11
質問者

お礼

ありがとうございました。xもまた変数で状況次第なのですが、C1=D1となるところが目標値で、そのためにはD1をいくつまで下げればいいのかを5単位で検証したかったのです。説明が下手で申し訳ないです。参考にさせていただきます。

Powered by GRATICA
全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 複数指定セル値と合致したセル値を返す

    A,B,C列に添付の値が入力されておりセルE2の値とF2~F7の値が両方一致したものがA,B列にあればC列の値をG列に順々に入力していきたいのですが。 どなたか関数が解る方、欲をいえばVBAコードが解る方ご教授願います。

  • EXCELで数値の入ったセルがいくつあるか計数

    EXCELで数値の入ったセルがいくつあるか計数したい。 どうすればいいか。 例題 1~200までの値の範囲でF1~F300までの各セルにランダムに数値が入っています。 これを次の4つに分類し各カウントをする。 (a):値が1~5までが何個 (b):値が6~10まで何個 (c):値が11~20まで何個 (d):値が21以上何個

  • エクセルで同じ名前の人のセルの数値を合計したい

    エクセルで同じ名前の人のセルの値を合計したいと思っています。 具体的には 4月      5月     6月 Aさん 100  Aさん 70  Bさん 35 Bさん 500  Bさん 60  Fさん 90 Cさん 50   Dさん 80 Eさん 120 となっています。 最後の欄にAさん○○、Bさん△△というふうにそれぞれの人の 数値の合計を求めたいのです。 関数で解決できるでしょうか? (※ VBAは全く分かりません。。。) どなか詳しい方がいらっしゃれば、お教え下さい。 宜しくお願い致します。

  • 指定した数だけデータをコピペする方法

    VBAの参考例を教えてください。 <シート1> A列に1から順に数字が入力されており、B列からE列まで数値のデータが入力されています。F列にはB列からE列にデータが入力されているセルの数をカウントした関数が入力されています。 <シート2> シート1のB~Eに入力されたデータが縦に入れ替えの上A列にコピぺされています。 ここで、シート1のA列の数値をコピーし、シート1F列に示されたデータ数分だけ、シート2のF列に縦に順々にペーストしていく方法をご教示ください。シート1のA列に入力された数値が最後の行にくるまでこれを繰り返します。 シート1 A B C D E F 1  a b c d 4 2  e d f   3 3  d e     2 ・ ・ ・ シート2 A B C D E F a         1 b         1 c         1 d         1 e         2 d         2 f          2 d         3 e         3 当方、VBAは全くの初心者です。急遽仕事で必要になってしまい、質問しました。 どうぞよろしくお願いします。

  • EXCELで指定した行内にある値以外を抽出する

    こんにちは。 業務で困っていることがあるので、知恵をお貸し下さい。 EXCELで指定した行内にある値以外を抽出したいのです。 A1:対象品番 B1:対象外 C1:数量 D1:納入日 E1:品番  F1:数量 A2:HHH6030 B2: C2: D2:09/9/29 E2:HIH6260 F2:1 A3:HHH6060 B3: C3: D3:09/9/29 E3:IIHK110 F3:84 A4:HHH7000 B4: C4: D4:09/10/1 E4:HHH6030 F4:24 A5:HHH7130 B5: C5: D5:09/10/1 E5:IHH7000 F5:8 A6:HHH7140 B6: C6: D6:09/10/1 E6:HHH7130 F6:2 とあります。 ●E列の中から、A列にある値以外のものを抜き出し、B列に値を返す。 ●の作業をしたいので、VBAを使ってもかまいませんので、何か良い方法があれば教えてください。 よろしくお願いします。

  • エクセルVBAで設定したセルの値

    エクセルVBAについての質問です。 例えば、A1とB1のセルの値を参照している数式がC1セルに設定してあるとします。 さらに、D1のセルにはC1の値を参照している数式が設定してあるとします。 VBAでA1、B1のセルの値を変更したとします。 次のステップのVBAでC1、D1のセルを参照すれば、A1、B1の変更が反映された後の正しい値である C1、D1の値が取得できるのでしょうか? できて当たり前だと思うのですが、セルに設定してある数式が大変複雑であったりすると、ちゃんとA1、B1の変更が反映された正しいC1、D1セルの値がVBAで取得できるのかちょっと不安です。 ばかな質問かもしれませんが、回答をよろしくお願い致します。

  • Concatenate関数が成立した後のセルを有効にする為には??

    現在、 A1に「1」 A2に「2」 A3に「3」 C1に「=CONCATENATE(D1,E1,F1)」 D1に「=」 E1に「SUM(」 F1に「A1:A3)」 と、それぞれ値もしくは数式が入っているとします。 C1のセル内容を、B1に「形式を選択して貼り付け」で「値(V)」を選択し、貼り付けします。 そうすると、B1はD1、E1、F1が結合された内容である「=SUM(A1:A3)」が表示されます。 B1に貼り付けした時点で、貼り付け内容である「=SUM(A1:A3)」を有効にすることは出来ますでしょうか? つまり、B1に貼り付けした時点で、「6」と表示させたいのです(現在は、B1を[F2]キーで選択し、[Enter]キーで有効にさせています...) 皆様のお知恵をお貸し頂けたら幸いです。 宜しくお願い致します。

  • fprintfで微小な数値を書き込む場合??

    fprintf( fp, "%10.20f, %2.20f, %2.20f\n", b,c,d); としてb,c,dの値を書きこもうとしました。 しかし、c,dの値が小さくて0になってしまいました。 どのように改善すればいいのですか?分かる方がいたら教えていただけないでしょうか? よろしくお願いします。 ちなみにc,dの値は0.000000023などです。

  • 2つのセルのどちらかに値が入れば

    2つのセルのどちらかに値が入れば いつもお世話になります。 WINDOWS XP EXCELL2003です。 現在はD5に =IF(A5="","",SUM(D4+B5-C5)) の数式が入っています。 ※あたりまえですがA5に入力されたときにD5に値が表示されます。 ご教示いただきたいのは、  B5 若しくは C5  のいずれかに値が入力されたら D5 に値が表示をしたい。 ご指導の程よろしく御願いします。

  • 数値を一つずつ別々のセルに分けるには?

    最大6桁の数値Aを、一つずつに分けて別々のセルB~Gに分けたい。 さらに右詰めにして桁数が少ない場合は0を埋めたい。 どうぞご指導よろしくお願いします。 サンプル例   A B C D E F G 123,450 1 2 3 4 5 0 12,345 0 1 2 3 4 5 987,654 9 8 7 6 5 4 100,000 1 0 0 0 0 0 52 0 0 0 0 5 2 2 0 0 0 0 0 2 ↑ ↑ 入力位置 表示位置

このQ&Aのポイント
  • プリンターEW-052Aのふたが外れ元に戻せない問題について
  • プリンターEW-052Aのふたが外れたまま元に戻せない理由と解決方法
  • EPSON社製品であるプリンターEW-052Aのふたが固定できず、元の位置に戻せないトラブルについて
回答を見る