![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
vbaをネットで検索しながら作成しているのですが、うまくいかず困っています。
お助けいただけたら嬉しいです。
やりたいことは、Y列「複数ロットNo」が空白ではない場合、Q列の「合計数量」を分割していく。
言い換えると、同じ入荷NO(F列)のものを、予定使用数(Z列)に合わせて実際使用数(AA列)に分割していく。
※添付図面の左から右にしたいです。右図に追加したものは、わかりやすく赤字にしてあります。
①Y列が「1」の場合、Q列とZ列を比較する。Z列が大きければ、Q列の値をAA列に転記。
②Y列が「1」で、Q列とZ列を比較してQ列が大きければ、Z列の値をAA列に転記する。
③1行下がって、Y列が「2」のZ列と、1行上のY列が「1」の「Q列-Z列」を比較する。
Z列が大きければ、Y列が「1」の「Q列-Z列」を転記。
④Z列が小さければ、Y列が「1」の「Q列-Z列」からY列が「2」のZ列を引く。
合計数量が0になるまで繰り返し。数が余った場合は、同じ入荷NOの最終列に加算。
IFを使用して、作成してみたのですがIFだらけになり非常にわかりにくくなってしまいました。
複数ロットNOは1~5まであり、3まで作成した段階で断念しました。
いい方法があれば、ご教示いただけると助かります。
-----------------------------------------------------------------
Dim m As Long
Dim i As Long
Dim wSG As Worksheet
With wSG
For i = 2 To lRowG
If .Cells(i, "Y").Value <> "" Then
If .Cells(i, "Y").Value = 1 Then
If .Cells(i, "Z").Value <= .Cells(i, "Q").Value Then
.Cells(i, "AA").Value = .Cells(i, "Z").Value
m = .Cells(i, "Q").Value - .Cells(i, "Z").Value
If .Cells(i, "H").Value = 2 Then
.Cells(i + 1, "AA").Value = m
ElseIf .Cells(i, "H").Value = 3 Then
If .Cells(i + 1, "Z").Value <= m Then
.Cells(i + 1, "AA").Value = .Cells(i + 1, "Z").Value
.Cells(i + 2, "AA").Value = m - .Cells(i + 1, "AA").Value
Else
.Cells(i + 1, "AA").Value = m
End If
Else
.Cells(i + 1, "AA").Value = m
End If
End If
Else
.Cells(i, "AA").Value = .Cells(i, "Q").Value
End If
End If
End If
Next i
End With
![「合計数量から引いていく」の質問画像](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/1/542543547_64edcd944ff84/M.png)
No.1ベストアンサー
- 回答日時:
こんばんは
ご説明が複雑で、なさりたいことが私には理解できなかったため、勝手に以下のように解釈しました。
>同じ入荷NO(F列)のものを、予定使用数(Z列)
>に合わせて実際使用数(AA列)に分割していく。
※ F列のNoは、同じNoが必ず連続した行にあるものと仮定しました。
・同じ入荷NoのQ列の数値を、同じNoの範囲内で以下の要領で行順に振り分ける。
1)合計数量がZ列の値より大きい場合はZ列の数量を振り分ける
2)Z列の値の分残っていなければ、残った数量を振り分ける
3)同じ入荷Noに振り分けて余った数量があれば、最後の行に加算して振り分ける(添付図の77行目から推測)
※ 実データは14行目から開始しているものと解釈しました。
(添付図より)
※ Q列、Z列の値は必ず整数値(=Long型で扱える範囲)であるものと仮定しています。
※ Q列、Z列に負の値がある場合は、符号を無視して正の値に読み替えます。
※ セル値のチェックは省略していますので、おかしな値があればエラーが発生します。
以下は、F列、Q列、Z列だけを参照して、AA列に記入する例です。
(他の列の値は参照していません)
Sub Q_13577887()
Dim NO As String, total As Long
Dim rw As Long, tmp As Long
For rw = 14 To Cells(Rows.Count, "F").End(xlUp).Row
If Cells(rw, "F").Text <> NO Then
NO = Cells(rw, "F").Text
total = Abs(Cells(rw, "Q").Value)
End If
tmp = Application.Min(total, Abs(Cells(rw, "Z").Value))
If Cells(rw + 1, "F").Text <> NO Then tmp = total
Cells(rw, "AA").Value = tmp
total = total - tmp
Next rw
End Sub
お返事ありがとうございます。
すごいっ。この一言に尽きます。
複雑に考えすぎて、IFだらけになり何がしたいのか自分でも分からなくなってきていました。このコードはすごくシンプルにまとまっていて、レベルの違いを痛感します。まだまだ、勉強不足だなっと思いました。
本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAで指定期間の範囲を抽出し、リストボックスに表示したいです。 2 2021/12/20 23:21
- Visual Basic(VBA) VBAで教えて頂きたいのですが? 3 2021/11/12 23:38
- Visual Basic(VBA) 【VBA】ユーザーフォーム リストボックスのヘッダー設定方法 2 2021/12/02 11:15
- Visual Basic(VBA) エラーコード1004 6 2022/06/09 14:12
- Visual Basic(VBA) 条件をつけてカウントする 4 2021/12/19 20:27
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) Excel VABについて 1.xlsm、VBA.xlsm2つのファイルがあり、1.xlsmにてVB 6 2021/12/13 17:46
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Excel(エクセル) エクセルマクロでデータ出力の際の条件がうまく機能しません。 5 2023/10/01 12:50
- Visual Basic(VBA) vbaを早くしたい 5 2022/09/09 10:58
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
B列の最終行までA列をオート...
-
VBAを使って検索したセルをコピ...
-
Cellsのかっこの中はどっちが行...
-
Excelで、あるセルの値に応じて...
-
VBAのFind関数で結合セルを検索...
-
Changeイベントでの複数セルの...
-
VBマクロ 色の付いたセルを...
-
複数処理 Worksheet_Change(ByV...
-
VBAで、特定の文字より後を削除...
-
【VBA】2つのシートの値を比較...
-
vba 2つの条件が一致したら...
-
【Excel VBA】 B列に特定の文字...
-
マクロ 最終列をコピーして最終...
-
エクセル 2つの表の並べ替え
-
文字列の結合を空白行まで実行
-
データグリッドビューの一番最...
-
マクロについて。S列の途中から...
-
IIF関数の使い方
-
VBA UserFormからの転記で
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
B列の最終行までA列をオート...
-
Excelで、あるセルの値に応じて...
-
vba 2つの条件が一致したら...
-
Cellsのかっこの中はどっちが行...
-
VBAを使って検索したセルをコピ...
-
文字列の結合を空白行まで実行
-
VBA指定行削除
-
VBAのFind関数で結合セルを検索...
-
IIF関数の使い方
-
VBA 何かしら文字が入っていたら
-
マクロ 最終列をコピーして最終...
-
エクセルについて
-
【VBA】2つのシートの値を比較...
-
URLのリンク切れをマクロを使っ...
-
データグリッドビューの一番最...
-
Changeイベントでの複数セルの...
-
空白セルをとばして転記
-
rowsとcolsの意味
-
エクセルVBAにて =A1=B1とすれ...
おすすめ情報