
在庫管理で、ワークシート”入出庫表”で①在庫を補充し入庫したいとき、摘要欄A列に”在庫補充”を 棚№B列に棚№を 入庫数C列に数を入力し、[在庫更新ボタン]を押すとE列、F列、G列、H列、I列に自動入力され ワークシート”型式表”に在庫数が反映される仕組みです。②在庫から出庫したいとき、①との違いは摘要欄A列に”現品票から蔵出し” と 入庫数ではなく、出庫数D列に数を入力します。
①と②以外の動作をするとメッセージボックスをだして更新できないようにしております。
これをユーザーフォームにし入力制ではなく、選択制にして操作性あげたいのです。とてもややこしいことを質問しておりますが、よろしくお願いいたします。以下が[在庫更新ボタン]のコードになります。
Sub 在庫更新()
Dim k, i, m, cmax1, cmax2, rowsData As Long
Dim ws1, ws2 As Worksheet
Dim str As String
Set ws1 = Worksheets("型式表")
Set ws2 = Worksheets("入出庫表")
cmax1 = ws1.Range("A65536").End(xlUp).Row
cmax2 = ws2.Range("A65536").End(xlUp).Row
For i = 6 To cmax2
'---記入漏れ対策---
If ws2.Range("A" & i).Value = "" Then
MsgBox "摘要を記入してください"
Exit For
ElseIf ws2.Range("B" & i).Value = "" Then
MsgBox "棚№を記入してください"
Exit For
ElseIf ws2.Range("C" & i).Value <> "" And ws2.Range("D" & i).Value <> "" Then
MsgBox "入庫数と出庫数のどちらかを削除してください"
Exit For
ElseIf ws2.Range("C" & i).Value = "" And ws2.Range("D" & i).Value = "" Then
MsgBox "入庫数と出庫数のどちらかを記入してください"
Exit For
End If
'---I列の更新状況をチェック。更新済ならスキップ---
If ws2.Range("I" & i).Value <> "更新済" Then
MsgBox "更新しました"
str = ws2.Range("B" & i).Value
'---E列|日時の計算---
ws2.Range("E" & i).Value = Now
'---F列|型式名の自動出力---
For k = 2 To cmax1
If str = ws1.Range("A" & k).Value Then
ws2.Range("F" & i).Value = ws1.Range("B" & k).Value
Exit For
End If
Next
'---G列|入庫数を入れ込む---
If ws2.Range("C" & i).Value <> "" Then
ws2.Range("G" & i).Value = ws2.Range("C" & i).Value
ElseIf Range("D" & i).Value <> "" Then
ws2.Range("G" & i).Value = ws2.Range("D" & i).Value * (-1)
End If
'---H列|現在の在庫数を計算---
If i > 6 Then
For m = i - 1 To 6 Step -1
If str = ws2.Range("B" & m).Value Then
ws2.Range("H" & i).Value = ws2.Range("H" & m).Value + _
ws2.Range("G" & i).Value
Exit For
End If
Next
End If
If i = 6 Or m = 5 Then
ws2.Range("H" & i).Value = ws2.Range("G" & i).Value
End If
'---I列|更新済を入力---
Range("I" & i).Value = "更新済"
Range("A" & i & ":I" & i).Interior.ColorIndex = 15
'---「型式表」のF列を更新---
ws1.Range("F" & k).Value = Range("H" & i).Value
'---「現在の在庫数」が「最低保管在庫」を下回ったら黄色にする---
If ws1.Range("E" & k).Value > ws1.Range("F" & k).Value Then
ws1.Range("A" & k & ":G" & k).Interior.ColorIndex = 6
End If
'---「現在の在庫数」が「最低保管在庫」を上回ったら無色にする---
If ws1.Range("E" & k).Value <= ws1.Range("F" & k).Value Then
ws1.Range("A" & k & ":G" & k).Interior.ColorIndex = 0
End If
End If
Next
End Sub

No.1
- 回答日時:
通りすがりの初級者ですが。
>Dim k, i, m, cmax1, cmax2, rowsData As Long
Dim ws1, ws2 As Worksheet
VBAではこの書き方は出来ません。変数それぞれに対して型宣言の記載が必要。
VBではこれでもOKなんですけどね。
ユーザーフォームについてはどのコントロールを用いるのかなど不明な点があり過ぎなのかも。
委託が詳細に打ち合わせできて良いとは思えます。
そうでないならユーザーフォームの作成(コントロールの種類や使い分けなど)については知っておくべきかも。
どんな物を作りたいのかが見えてこないですし。
めぐみん_様 アドバイスありがとうございます。
私が張りました使用しておるコードですが、ネットで使えそうなものをコピーして自分用に当てはめて使っていました。
上手く使えてると思っていたのですが。。。
勉強不足、知識不足である私の為にアドバイスしてくださり感謝します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Visual Basic(VBA) エクセルVBAで教えて頂きたいのですが? 2 2022/12/31 20:28
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) セルS2に入力した「月」と一致したB列の右隣へセルS110の値を転記する下記マクロを実行するとエラー 2 2022/12/06 17:32
- Excel(エクセル) vba userformで漢字を全角カタカナに 2 2022/07/24 15:38
- Visual Basic(VBA) 動きっぱなしです。止め方とプロシージャの間違いを教えて下さい! 5 2022/08/15 23:08
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB.NET DataGridViewでIsNewRo...
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
switch の範囲指定
-
VBAでループ内で使う変数名を可...
-
銀行の窓口処理の件で知ってる...
-
VBAでCOPYを繰り返すと、処理が...
-
EXCEL VBA マクロ 実行する度に...
-
UMLでの例外処理
-
【Excel】特定の文字を含むセル...
-
DoEventsがやはり分からない
-
月度は何て読みますか?
-
vba 空のデータをSplitする時の...
-
EXCEL2003 VBAで2つのDBに接続...
-
ハードウェア処理とソフトウェ...
-
内部処理形式ってなんですか
-
Do~Loopした回数をカウントしたい
-
FFTの結果ついて
-
2重のDo~Loopは?
-
Excel VBAにて2つの処理を同時...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
VBAでループ内で使う変数名を可...
-
【Excel】特定の文字を含むセル...
-
switch の範囲指定
-
EXCEL VBA マクロ 実行する度に...
-
UMLでの例外処理
-
DoEventsがやはり分からない
-
月度は何て読みますか?
-
お家デートをしててハグを長い...
-
VB.NET Excelを読み込んでDataT...
-
VBの質問#if 0 then ってどう...
-
Do~Loopした回数をカウントしたい
-
VBAでCOPYを繰り返すと、処理が...
-
メルカリのメルカードで買い物...
-
インタラクティブの反対語は?
-
Loadイベント中にほかのイベン...
-
リョウ・・・量?料?
-
vba 空のデータをSplitする時の...
-
findは動くがfindnextがマクロ...
おすすめ情報
お二方のご指摘を参考にユーザーフォームをどう使いたいかを説明させて頂きたいのですが文字数制限の為、補足内容文を画像にて添付させてもらってますことをご了承ください。
操作性を上げたいと申しましたのは、他の者が操作するので手打ちで入力するより選択できるようにすることで入力ミスなどを少しでも防ぎたいのです。
以降の補足に画像を添付させて頂きます。よろしくお願いいたします。
画像内容を説明させて頂きます。
6行目の内容です。
ワークシート”入出庫表” A列適用に在庫補充。B列棚№に111。C列入庫数に1。 を手動で入力し在庫更新ボタンを押すと E,F,G,H,I列に情報が自動入力され、ワークシート”型式表”に在庫数が反映される仕組みです。
この手動で入力してしたのをまず在庫更新ボタンを押しユーザーフォームを出し1⃣適用2⃣棚№3⃣・4⃣入庫数OR出庫数
1⃣、2⃣、3⃣・4⃣を選択しOKボタンでそれぞれの列入力されるようにしたいのです。
※2⃣に関しましては画像のように棚№・型式・図番・符号が見えて選べるようにしたいのです。
画像内容を説明させて頂きます。
こちらのワークシート”型式表”はワークシート”入出庫表”で入力されたものが反映される仕組みなっております。よろしくお願いいたします。
おはようございます。Qchan1962様。補足をさせて頂きます。
>
これは、おかしいように思いますが、、手動で入力してしたデータでユーザーフォームを出しているのに、2⃣で変更してしまうと言う事でしょうか?
変更する可能性があるのであれば、初めからユーザーフォームで選択してデータを書き込めば良いと思います。
まさにその通りで、ユーザーフォームで選択した情報が入出庫表の6行目からA列、B列、C列orD列に書き込まれる。といった方法で進めたいのです。説明が足らず申し訳ございません。