独学でエクセルVBAの初心者です。
定尺の鋼材から一定の長さのものが何本切り出せるかを調べるプログラムを作りたいです。
ネットで調べたところカッティングストック問題というものすごい難しいサイトに当たりましたが、
そのような難しいものではなく単純に同じ長さのものを切っていき、必要本数が取れたら次の長さを
切っていくというものを作りたいと思います(最終的に定尺何本必要か知りたい)。
まだまだ始めたばかりなのですが、do while文でorを使ったのですが反映されません。
なぜなのでしょうか? iが3になった時点で引くのを止めたいのですが止まりません教えてください。
Sub Test()
Worksheets("Sheet1").Cells(1, 2).Value = 5500
Worksheets("Sheet1").Cells(2, 2).Value = 1000
Worksheets("Sheet1").Cells(3, 2).Value = Range("B1").Value
Dim i
i = 0
Do While Range("B3").Value > Range("B2").Value Or Range("B4").Value = 3
i = i + 1 ↑この部分
Range("B3").Value = Range("B3").Value - Range("B2").Value
Loop
Worksheets("Sheet1").Cells(3, 2).Value = Range("B3").Value
Worksheets("Sheet1").Cells(4, 2).Value = i
End Sub
No.3ベストアンサー
- 回答日時:
Do While Range("B3").Value > Range("B2").Value Or Range("B4").Value = 3
の部分を日本語にすると
B3の値がB2の値より大きい 或いは B4の値が 3 の間は繰り返して処理を行う
という事ですが、これがご希望ではないですよね。
B3の値がB2の値より大きく かつ iの値が 3 より小さい時だけ繰り返して処理を行う
Do While Range("B3").Value > Range("B2").Value And i < 3
ではないでしょうか。
複数の条件を1行のコードにまとめるのは、なかなか頭の整理がつきにくいものです。
Do While Range("B3").Value > Range("B2").Value
If i = 3 Then Exit Do
といったように、条件を一つにして、その下に
繰り返しを抜ける処理を IF文で追加する方法もあります。
これが意外と後から見直しても、ほかの人が見ても結構わかりやすい書き方だと思います。
回答ありがとうございます。
If i = 3 Then Exit Doをつけたら抜けることができました。ありがとうございます。
いろんなサイト見てみても解決できずに完全に行き詰まっていたのに一発で解決頂きありがとうございます。
目から鱗です。
ありがとうございました。
No.2
- 回答日時:
3本以上取れる場合は、
3本で処理をやめたいのですね?
判定条件の基礎となっている、B4セルの値ですが
Worksheets("Sheet1").Cells(4, 2).Value = i
の段階で初めてB4に値が入力されます。
この行はループの後ろにありますので、
いつまでもB4が空白のままでかわらず、
3にならないため判定条件にかかりません。
ちなみに、エラーの原因を突き止める場合は、
VBEのステップイン機能などを使って、
一行ずつ状態を目で追っていくといいですよ。
また、同じくVBEに「ローカルウインドウ」を表示させると、
実行中の変数の値の変化も目で確認できます。
サンプルを書いておきます。
-------------
Sub sample()
Const zencho As Long = 5500 '全長
Const ippon As Long = 500 '1本の長さ
Dim nokori As Long '残りの長さ
Const iMAX As Integer = 3 '指定本数
Dim i As Integer
'初期設定
nokori = zencho
'切り出し作業
For i = 1 To iMAX 'i = 3になるまでループ
If nokori >= ippon Then
nokori = nokori - ippon '引き算して続行
Else
Exit For '残りが1本分に満たない場合は引き算しないでループ終了
End If
Next i
'結果発表(ループ終了時、iが切り出した数より1多くなるため1を引く)
MsgBox i - 1 & "本" & Chr(13) & nokori & "残り"
End Sub
回答ありがとうございます。
コードまで書いていただきありがとうございます。
今はまだ全部は理解できませんが、貼り付けて実行したところ私のやりたかった通りになりました。
これから勉強して理解に努めたいと思います。ありがとうございました。
No.1
- 回答日時:
> iが3になった時点で引くのを止めたいのですが止まりません教えてください。
というのであれば,判定条件でiを使わなければ話になりません。
ところが,
Range("B3").Value > Range("B2").Value
または
Range("B4").Value = 3
を条件にしていて,iはどこにも出てきません。どうして?
この回答への補足
ご回答ありがとうございます。
すいません。最初iだったんですがいろいろ触って変わってしまいました。
最初のコードはこれです。
Sub Test()
Worksheets("Sheet1").Cells(1, 2).Value = 5500
Worksheets("Sheet1").Cells(2, 2).Value = 1000
Worksheets("Sheet1").Cells(3, 2).Value = Range("B1").Value
Dim i
i = 0
Do While Range("B3").Value > Range("B2").Value Or i = 3
i = i + 1 ↑ここです
Range("B3").Value = Range("B3").Value - Range("B2").Value
Loop
Worksheets("Sheet1").Cells(3, 2).Value = Range("B3").Value
Worksheets("Sheet1").Cells(4, 2).Value = i
End Sub
ご指摘された所ようにセルを指定してもダメ、括弧でかこってもダメ、もしかして++かな?とやってもダメ
でした。考え付くことはやってみましたがダメでした。どうかよろしくご教授ください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) 配列の勉強をしています。使用する変数の意味、検索条件の書き方が難しいです。 2 2022/09/15 14:06
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/02/02 09:25
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
首吊りどこ締めるの
-
白血球が多いとどんな心配があ...
-
彼女のことが好きすぎて彼女の...
-
勃起する時って痛いんですか? ...
-
Ig₋Eの数値(?について
-
小数点以下を繰り上げたものを...
-
検便についてです。 便は取れた...
-
風俗店へ行く前のご飯
-
EXCELで条件付き書式で空白セル...
-
舌の裏の痛みのないプツプツの...
-
精子が黄色?
-
これって喉仏ですか? 私は女性...
-
VLOOKUP関数を使用時、検索する...
-
至急!尿検査前日にオナニーし...
-
2つの数値のうち、数値が小さい...
-
値が入っているときだけ計算結...
-
甲状腺が腫れているが血液検査...
-
Excelで""で囲む方法
-
ある範囲のセルから任意の値を...
-
エクセル指定した範囲からラン...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
首吊りどこ締めるの
-
至急!尿検査前日にオナニーし...
-
白血球が多いとどんな心配があ...
-
尿検査前日に自慰行為した時の...
-
検便についてです。 便は取れた...
-
彼女のことが好きすぎて彼女の...
-
腕を見たら黄色くなってる部分...
-
勃起する時って痛いんですか? ...
-
尿検査の前日は自慰控えたほう...
-
精子が黄色?
-
中出しをするとお腹が痛い・・・。
-
EXCELで条件付き書式で空白セル...
-
口の中に黒い血の塊
-
これって喉仏ですか? 私は女性...
-
2つの数値のうち、数値が小さい...
-
納豆食べた後の尿の納豆臭は何故?
-
EXCELで式からグラフを描くには?
-
小数点以下を繰り上げたものを...
-
excelでsin二乗のやり方を教え...
-
エクセル指定した範囲からラン...
おすすめ情報