いつもこの場をお借りしてご教授いただいております。
sheetsA(在庫情報と入庫情報が入力されているシートです)
A列 在庫数
B列 受注合計数(sheetsBの受注数量の合計値が表示されています。)
M列 商品名(sheetsBの商品名と同じ)
Y列 ここに結果を入力するためのセルです
※ 複数ロットの入庫予定があるため、1行だけのデータではありません。
sheetsB(受注情報が入力されているシートです)
B列 受注された商品名(sheetsAの商品名と同じ)
C列 受注数量
K列 受注品の納期
※ 1行ごとにお客様からの受注情報があります。
※ 複数の受注を受けているため、1行だけのデータではありません。
例
○在庫・入荷情報(sheetsAに相当)
みかん(商品名)の在庫数が200個あります。次の入庫予定は4/10です。
◇受注情報(sheetsBに相当)
みかん(商品名)の受注が3/10に80個、3/20に100個、3/30に200個あります。
この時、在庫数200個は3/20の受注までは足りますが、3/30の受注分には足りません。
そのため、4/10の入庫予定を繰り上げなければなりません。
いま計算させて表示させたいのは、在庫数から受注数を引き算して、不足になる日の『3/30から不足』という情報です。
知人のマクロを応用し、エラーが発生しないまでは動作しましたが、上記内容を満たせているマクロプログラムなのかが分かりません。
↓ いま現在のマクロプログラム ↓
Dim i, lastrow, sumQ As Long 'sheetsAの定義
Dim sumC, lastrow2, ii As Long 'sheetsBの定義
lastrow = Sheets("sheetsA").Range("A400").End(xlUp).Row 'sheetsAの最終行
lastrow2 = Sheets("sheetsB").Range("A2000").End(xlUp).Row 'sheetsBの最終行
For i = 3 To lastrow
For ii = 15 To lastrow2
'Y列の在庫切れ日時対象
If Sheets("sheetsA").Range("A" & i).Value < Sheets("sheetsA").Range("B" & i).Value Then sumC = Sheets("sheetsA").Range("M" & i).Value And sumC + Val(Sheets("sheetsB").Range("C" & ii).Value) Else sumC = Sheets("sheetsA").Range("A" & i).Value And Val(Sheets("sheetsB").Range("C" & ii).Value)
If sumC > Val(Sheets("sheetsA").Range("A" & i).Value) Then
While Val(Sheets("sheetsA").Range("A" & i + 1).Value) - sumC < 0
Sheets("sheetsA").Range("Y" & i).Value = Sheets("sheetsB").Range("K" & ii).Value & "から不足"
sumC = Sheets("製品発注残一覧").Range("C" & i).Value '製品発注残一覧の受注合計数
ii = ii + 1
Wend
Sheets("sheetsA").Range("Y" & i).Value = Sheets("sheetsB").Range("K" & ii).Value & "から不足"
Sheets("sheetsA").Range("Y" & i).Value = ""
Next
Next
End Sub
よろしくお願いいたします。
No.7
- 回答日時:
No6です。
サンプル画像の提示例が漏れました。以下の様な画像が提示されることを期待しています。
(例ではA,B,M,Y列のみですが、ほかにも関連する列があればそれも含めてください)
SheetsB,製品発注残一覧についてもお願いいたします。
No.6
- 回答日時:
補足要求です。
①画像が小さいのでよく状況がつかめません。
私の添付画像(例)のように、今回のマクロで関連する列のみを表示すれば、もっと鮮明にレイアウトが判るかと思われます。
(関係ない列は非表示にします)
そのようにして、SheetsA、SheetsBを再提示していただけませんでしょうか。
②
>みかん(商品名)の受注が3/10に80個、3/20に100個、3/30に200個あります。
>この時、在庫数200個は3/20の受注までは足りますが、3/30の受注分には足りません。
>そのため、4/10の入庫予定を繰り上げなければなりません。
①と同様に画像が小さいので、状況がよくわかりません。
③”製品発注残一覧”というシートも使用されているようですが、これについてのレイアウトの提示もお願いします。
④
>Y列 ここに結果を入力するためのセルです
Y列には、どのような結果を入力したいのでしょうか?
No.5
- 回答日時:
No.4 の訂正
「ただし罫線などが先にひかれているとそこまで使われていると判断されてしまいます。」の一行は不要でした。
申し訳ございません「SpecialCells(xlCellTypeLastCell)」の時と混同していました。
とんでもございません。
間違えていただいたおかげで、2通りの使い方を理解しました。
大変お手数をおかけしますが、引き続きよろしくお願いいたします。
No.4
- 回答日時:
No.3 のお礼について
使われているセルを探してその行番号を返しますので狭めても時間は変わりません。もし時間が変わるならばデータを落としているはずです。
一般的には最終行指定などせず「Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row」などが使われます。
ただし罫線などが先にひかれているとそこまで使われていると判断されてしまいます。
なるほど。
そんなことまで知りませんでした。
では安全策として、データの範囲を指定せず、ご指摘いただいたとおりに変更させていただきます。
ありがとうございます。
No.3
- 回答日時:
No.1 のお礼についてのヒント
☆「lastrow = Sheets("sheetsA").Range("A400").End(xlUp).Row」について
これの意味はA列の400行目(実際には400行は入らない)から上に向かって使われているセルを探してその行番号を「lastrow」に代入します。つまり400行以降のデータは無視されます。
☆「lastrow2 = Sheets("sheetsB").Range("A2000").End(xlUp).Row」
これの意味はA列の2000行目(実際には2000行は入らない)から上に向かって使われているセルを探してその行番号を「lastrow2」に代入します。つまり2000行以降のデータは無視されます。
ご連絡ありがとうございます。
私も同じ解釈をしておりましたので、その点は問題ありません。
範囲を広げすぎると、マクロ処理に時間がかかったため、範囲を狭めました。
引き続きよろしくお願いいたします。
No.2
- 回答日時:
もう一つ確認ですが
① 「sheetsA」に必ずデータが有るのは本当にA列でしょうか?M列ではないでしょうか?
② 「sheetsB」に必ずデータが有るのは本当にA列でしょうか?B列ではないでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) マクロで最終行から上に検索を逆にしたい 1 2022/05/17 18:27
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 4 2023/05/26 10:43
- Excel(エクセル) 並べ替え、ソートの構文がわからない。 お世話になります。VBA超初心者です。 エクセルでワークシート 2 2023/06/28 21:00
- Excel(エクセル) vba userformで漢字を全角カタカナに 2 2022/07/24 15:38
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) VBA 請求書自動作成 3 2022/04/24 01:58
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
文字列の結合を空白行まで実行
-
Worksheets メソッドは失敗しま...
-
Excelで、あるセルの値に応じて...
-
vba 2つの条件が一致したら...
-
【VBA】2つのシートの値を比較...
-
B列の最終行までA列をオート...
-
Changeイベントでの複数セルの...
-
VBAを使って検索したセルをコピ...
-
エクセルでフォームのチェック...
-
VBA 値と一致した行の一部の列...
-
VBAで、特定の文字より後を削除...
-
VBAで10行おきにセルの下に罫線...
-
VBAコンボボックスで選択した値...
-
データグリッドビューの一番最...
-
マクロ 最終列をコピーして最終...
-
VBAのFind関数で結合セルを検索...
-
rowsとcolsの意味
-
空白セルをとばして転記
-
追記する列を増やしたい 2つの...
-
【VBA】複数行あるカンマ区切り...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
Cellsのかっこの中はどっちが行...
-
VBAのコードを教えてください
-
VBAを使って検索したセルをコピ...
-
B列の最終行までA列をオート...
-
エクセルvbaについて
-
vba 2つの条件が一致したら...
-
Excelで、あるセルの値に応じて...
-
VBA UserFormからの転記で
-
VBAのFind関数で結合セルを検索...
-
文字列の結合を空白行まで実行
-
IIF関数の使い方
-
VBA 何かしら文字が入っていたら
-
マクロ 最終列をコピーして最終...
-
Changeイベントでの複数セルの...
-
エクセルVBAにて =A1=B1とすれ...
-
【VBA】2つのシートの値を比較...
-
データグリッドビューの一番最...
-
VBマクロ 色の付いたセルを...
-
VBAで指定範囲内の空白セルを左...
おすすめ情報
こちらがsheetsAになります。
商品名ごとに空白行を入れているため、すべての行に必ずデータがあるわけではありませんが、
空白行以外の行には必ずデータが入っています。
こちらがsheetsBになります。
このシートはデータだけのため、空白行はありません。
N列に関数エラーがありますが、添付するためにデータをコピーするとエラーになりましたが、
問題ありません。
こちらが『sheetsA』になります。
”製品発注残一覧”というシートは本来のシート名(sheetsB)で、簡単にするために
シート名を変更しました。
ややこしくしてすみません。
引き続きsheetsBを添付いたします。
こちらがsheetsBになります。
まだ小さいでしょうか??
引き続きよろしくお願いいたします。