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

在庫管理で、ワークシート”入出庫表”で①在庫を補充し入庫したいとき、摘要欄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

「VBA ユーザーフォームにしたい」の質問画像

質問者からの補足コメント

  • うーん・・・

    お二方のご指摘を参考にユーザーフォームをどう使いたいかを説明させて頂きたいのですが文字数制限の為、補足内容文を画像にて添付させてもらってますことをご了承ください。

    操作性を上げたいと申しましたのは、他の者が操作するので手打ちで入力するより選択できるようにすることで入力ミスなどを少しでも防ぎたいのです。

    以降の補足に画像を添付させて頂きます。よろしくお願いいたします。

    「VBA ユーザーフォームにしたい」の補足画像1
      補足日時:2020/09/20 03:09
  • 画像内容を説明させて頂きます。
    6行目の内容です。
    ワークシート”入出庫表”  A列適用に在庫補充。B列棚№に111。C列入庫数に1。 を手動で入力し在庫更新ボタンを押すと E,F,G,H,I列に情報が自動入力され、ワークシート”型式表”に在庫数が反映される仕組みです。

    この手動で入力してしたのをまず在庫更新ボタンを押しユーザーフォームを出し1⃣適用2⃣棚№3⃣・4⃣入庫数OR出庫数  
    1⃣、2⃣、3⃣・4⃣を選択しOKボタンでそれぞれの列入力されるようにしたいのです。

    ※2⃣に関しましては画像のように棚№・型式・図番・符号が見えて選べるようにしたいのです。

    「VBA ユーザーフォームにしたい」の補足画像2
      補足日時:2020/09/20 03:32
  • どう思う?

    画像内容を説明させて頂きます。
    こちらのワークシート”型式表”はワークシート”入出庫表”で入力されたものが反映される仕組みなっております。よろしくお願いいたします。

    「VBA ユーザーフォームにしたい」の補足画像3
      補足日時:2020/09/20 03:38
  • どう思う?

    おはようございます。Qchan1962様。補足をさせて頂きます。

    これは、おかしいように思いますが、、手動で入力してしたデータでユーザーフォームを出しているのに、2⃣で変更してしまうと言う事でしょうか?

    変更する可能性があるのであれば、初めからユーザーフォームで選択してデータを書き込めば良いと思います。

    まさにその通りで、ユーザーフォームで選択した情報が入出庫表の6行目からA列、B列、C列orD列に書き込まれる。といった方法で進めたいのです。説明が足らず申し訳ございません。

    No.4の回答に寄せられた補足コメントです。 補足日時:2020/09/21 09:26

A 回答 (11件中11~11件)

通りすがりの初級者ですが。



>Dim k, i, m, cmax1, cmax2, rowsData As Long
 Dim ws1, ws2 As Worksheet

VBAではこの書き方は出来ません。変数それぞれに対して型宣言の記載が必要。
VBではこれでもOKなんですけどね。

ユーザーフォームについてはどのコントロールを用いるのかなど不明な点があり過ぎなのかも。
委託が詳細に打ち合わせできて良いとは思えます。
そうでないならユーザーフォームの作成(コントロールの種類や使い分けなど)については知っておくべきかも。
どんな物を作りたいのかが見えてこないですし。
    • good
    • 0
この回答へのお礼

ありがとう

めぐみん_様 アドバイスありがとうございます。
私が張りました使用しておるコードですが、ネットで使えそうなものをコピーして自分用に当てはめて使っていました。
上手く使えてると思っていたのですが。。。
勉強不足、知識不足である私の為にアドバイスしてくださり感謝します。

お礼日時:2020/09/21 01:52

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