電子書籍の厳選無料作品が豊富!

vbaの初心者です。
複雑な条件なのでどのようにしたらいいか分からず困っています。
お助けいただけると嬉しいです。

データはC列からAH列まであります。下の画像はAH列まで載せると細かくなるので、J列までとしています。行は2行目(1行目は見出し)から、最大で50行目までです。
C列に在庫が載っていますが、在庫が無いものは「0」となっています。
C列の数値分を順番に同じ行のD列~AH列まで引いていくようにしたいです。
2行目が終われば、3行目というように順番に最大50行目まで繰り返したいです。

引いた後C列の数値が減っていますが、最初のままの数値でも構いません。((例)C5が「300」のままでも構いません。)

「vba 数値がゼロになるまで引く」の質問画像

A 回答 (2件)

以下のマクロを標準モジュールに登録してください。


元のデータが更新されますのでバックアップをとってから実行してください。
C列の値は更新されます。
---------------------------------------------------------
Option Explicit
Public Sub 在庫分配()
Dim row As Long
Dim col As Long
Dim dd As Long
Dim val As Long
Dim wval As Long
For row = 2 To 50
If Cells(row, 3).Value <> "" And Cells(row, 3).Value > 0 Then
val = Cells(row, 3).Value
For dd = 1 To 31
col = dd + 3
If Cells(row, col).Value <> "" Then
wval = Cells(row, col).Value
If val >= wval Then
val = val - wval
Cells(row, col).Value = 0
Else
Cells(row, col).Value = wval - val
val = 0
End If
If val = 0 Then Exit For
End If
Next
Cells(row, 3).Value = val
End If
Next
MsgBox ("完了")
End Sub
    • good
    • 0
この回答へのお礼

早速のお返事ありがとうございます。

標準モジュールで無事できました。
教えてgooで回答してくださる方々のレベルの高さにびっくりしています。色んな条件が増えれば難しくて難しくて。
何時間もかけて考えてはいるのですが、中々結果に結びつきません。

本当にありがとうございます。とても助かりました。

お礼日時:2018/07/17 21:32

処理手順を日本語を使った箇条書きに書き表してみましょう。


それが処理アルゴリズムです。
その際、1行目から順にある行数同じ処理を繰り返す箇所はループ変数を設けることを念頭に「以下の処理を〇行目から×行目まで繰り返す」といった書き表し方をすると考えをまとめやすいです。

ということでお悩みの部分はVBAという特定のプログラミング言語によらない、プログラミングの基礎的部分(=設計)ですので、そこをご自身で考えられるようにならないとどの問題も自力では解決できない、、、ということになります。
頑張りましょう。

参考まで。
    • good
    • 0
この回答へのお礼

ご指摘ありがとうございます。
早くできるようになるためにネットで検索してやってはいるのですが
中々思うようにいかず困っています。

お礼日時:2018/07/17 20:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!