
在庫管理で、ワークシート”入出庫表”で①在庫を補充し入庫したいとき、摘要欄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.11ベストアンサー
- 回答日時:
#10です。
その通りです。
挿入場所は、少しIF文の書き方が良くある形で無かったので
見つけにくかったのかも知れませんね。
ご自身で探す事は、大事です。もし仕様を変更したい場合やリストを
追加したくなった時など、QAサイトでも人が書いたコードを丸っと示されて
直したいと言っても中々回答は付きません。ご自身で調べた内容や分からない点を含めるとスムースにアドバイスしてもらえる事が多いように思います。
従って、教えてもらったコードは、ご自身で理解する必要があります。
いきなりは無理でもステップ実行などで処理の流れや処理内容を確認するようにしてください。その積み重ねで理解やデバッグスキルが付いてくると思いますので。
こんな感じに纏めてみました。
Private Sub ComboBox1_Change()
With CommandButton1
If ComboBox1.Value = "在庫補充" Then
.Caption = "在庫補充"
.ForeColor = &HC00000 '入庫 青 .ForeColor = RGB(0, 0, 255)
End If
If ComboBox1.Value = "出庫" Then
.Caption = "出庫"
.ForeColor = &HFF& '出庫 赤 .ForeColor = RGB(255, 0, 0)
End If
End With
ComboBox2.Value = ""
ComboBox3.Value = ""
Label1.Caption = ""
End Sub
コメント部分の .ForeColor = RGB(0, 0, 255)は、この様な書き方でもOKと
言う意味ですが、せっかく調べて頂いたのでそのまま、使いました。
オブジェクトの名前などを変更した方がわかり易くなるかもしれません。
この辺は、調べて挑戦してみても良いかも知れませんね。
ありがとうございます。このコードを理解できるように努力したいと思います。
こんな未熟な私に優しくご指導くださり、ありがとうございます。
今後ともよろしくお願いいたします。
今回も本当にありがとうございました。
No.10
- 回答日時:
こんばんは、
なるほど、、
意地悪する訳ではありませんが、聞いてばかりいると、ご自身のスキルも向上しませんし、調べる習慣がなくなります。
もっとも、勉強が目的でなく作成が1番だと思いますし、私みたいに自身使う為のVBAの作成は年に1度くらいでプロでないのでスキルアップも必要ないかもですが、、
ユーザーフォームはもっといろいろと細かい設定も出来ます。
ボタン自体を出さないとか、色を変えるとか、、なので
プロパティを参考にしてください。
オフィシャルが良いかと思いましたが、
わかり易い説明のある参考サイトです。
https://kosapi.com/post-3650/
プロパティのForeColorを設定してください。
フォーム作成時でも良いですし、VBAで設定しても良いです。
コード自体書いた方が、早かったのですが、
処理に影響する部分では無いですし、ご理解ください。
私のスキル向上まで心配してくださり有り難い限りです。
サイト拝見させてもらいました。
自分で色々試した結果分からずでアドバイスを頂きたく思います。
commandボタン1が入庫になる時は青
commandボタン1が出庫になる時は赤
になるようにするには
Private Sub ComboBox1_Change()
If ComboBox1.Value = "入庫" Then CommandButton1.Caption = "入庫"
If ComboBox1.Value = "出庫" Then CommandButton1.Caption = "出庫"
ComboBox2.Value = ""
ComboBox3.Value = ""
Label1.Caption = ""
End Sub
ここに
CommandButton1.ForeColor = &HC00000 ’入庫 青
CommandButton1.ForeColor = &HFF& ’出庫 赤
を入れると色が変えれそうな気がしたのですが自分で考えた結果結局わかりませんでした。
ご解答頂けたら幸いです。
No.9
- 回答日時:
こんにちは、
以前のコードにあったような気がしましたが、、
コマンドボタン1の処理を
Private Sub CommandButton1_Click()
Dim errmsg As String
Call error_check(errmsg)
If Len(Trim(errmsg)) <> 0 Then
MsgBox errmsg
GoTo endoutput
End If
'---メイン処理
Call 在庫補充(Rng)
'---
MsgBox ("入力が完了しました")
Unload Me
endoutput:
End Sub
キャンセルボタン
Private Sub CommandButton2_Click()
Unload Me
End Sub
処理を続けて行いたい場合などは無いのでしょうか?
もし、ユーザーフォームを消さずに続ける場合があるのであれば、
添付図の様にCheckBox1を追加して
コマンドボタン1の処理を下記のようにします。
Private Sub CommandButton1_Click()
Dim errmsg As String
Call error_check(errmsg)
If Len(Trim(errmsg)) <> 0 Then
MsgBox errmsg
GoTo endoutput
End If
'---メイン処理
Call 在庫補充(Rng)
'---
MsgBox ("入力が完了しました")
If CheckBox1.Value = False Then
Unload Me
Else
ComboBox2.Value = ""
ComboBox3.Value = ""
End If
endoutput:
End Sub
余談:先のご質問も解決されているようであれば、閉じる事をお勧めします。

Qchan1962様 何度もありがとうございます。
最後にcommandbutton1ですが在庫補充は青色文字、出庫のときは赤色文字にするのはできますでしょうか?
次々出して申し訳ありません。
>余談:先のご質問も解決されているようであれば、閉じる事をお勧めします。
先の質問は閉じさせて頂きます。
No.8
- 回答日時:
#6,7です
>1点目。履歴として残し棚番で上書きせず、行下方向に増やしていく方法をとりたいと思いますがどこを変更すればよいのか?
Sub 在庫補充(Rng As Range)内に記載していますが、
'n = .Cells(Rows.count, "A").End(xlUp).Row + 1のシングルコーテーションを
削除してください。
上の n = Target.Row も削除可能です。
>2点目。入庫個数選択を1~18にしたいです。
Private Sub ComboBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)の
If ComboBox1.Value = "在庫補充" Then varMax = Rng.Offset(, 4).Value - Rng.Offset(, 5).Value
With ComboBox3
.Clear
For i = 1 To varMax
.AddItem i
Next
.ListIndex = varMax - 1
End With
が不要ですので削除してください。
また、その変数宣言も不要になりますので削除可能です。
i As Long,
Dim varMax As Integer
Qchan1962様 すごいです。本当にありがとうございます。
私のやりたかった以上のことができ感動しております。
後もう一つやりたいことがあります。
ユーザーフォームで入力が完了した時にメッセージボックスで”入力が完了しました”の後、ユーザーフォームを閉じたいのですがこれは可能でしょうか?
何度もお手数おかけしておりますがよろしくお願いいたします。
No.7
- 回答日時:
#6 続きです
Sub 在庫補充(Rng As Range)
Dim n As Long, Target As Range, m As Long
Set Target = Worksheets("入出庫表").Range("B:B").Find(Rng.Value)
With Sheets("入出庫表")
If Target Is Nothing Then
n = .Cells(Rows.count, "A").End(xlUp).Row + 1
Else
n = Target.Row
'---下記1行をコメントを外すと履歴となります(上書きしない)
'n = .Cells(Rows.count, "A").End(xlUp).Row + 1
End If
.Range("A" & n).Value = ComboBox1.Value
.Range("B" & n).Value = Rng.Value
'---E列|日時の計算---
.Range("E" & n).Value = Now
'---F列|型式名の自動出力---
.Range("F" & n).Value = Rng.Offset(, 1).Value
'---G列|入庫数を入れ込む---
If ComboBox1.Value = "在庫補充" Then
.Range("C" & n).Value = ComboBox3.Value
.Range("D" & n).Value = ""
'---H列|現在の在庫数を計算---
.Range("H" & n).Value = Rng.Offset(, 5).Value + ComboBox3.Value
Else
.Range("D" & n).Value = ComboBox3.Value
.Range("C" & n).Value = ""
.Range("H" & n).Value = Rng.Offset(, 5).Value - ComboBox3.Value
End If
.Range("G" & n).Value = ComboBox3.Value
'---I列|更新済を入力---
.Range("I" & n).Value = "更新済"
.Range("A" & n & ":I" & n).Interior.ColorIndex = 15
End With
With Sheets("型式表")
m = Rng.Row
'---「型式表」のF列を更新---
If ComboBox1.Value = "在庫補充" Then
.Range("F" & m).Value = .Range("F" & m).Value + ComboBox3.Value
Else
.Range("F" & m).Value = .Range("F" & m).Value - ComboBox3.Value
End If
.Range("G" & m).Value = .Range("E" & m).Value - .Range("F" & m).Value
'---「現在の在庫数」が「最低保管在庫」を下回ったら黄色にする---
If .Range("E" & m).Value > .Range("F" & m).Value Then
.Range("A" & m & ":G" & m).Interior.ColorIndex = 6
End If
'---「現在の在庫数」が「最低保管在庫」を上回ったら無色にする---
If .Range("E" & m).Value <= .Range("F" & m).Value Then
.Range("A" & m & ":G" & m).Interior.ColorIndex = 0
End If
End With
End Sub

No.6
- 回答日時:
こんにちは、
ユーザーフォームから選択して1型番ごと処理をするで作る場合、
入出庫表の書き込み意図の解釈がいまいち出来ません。
履歴として残すのか、最後の処理情報として書き込むのかです。
前者は、棚番で上書きせず、行下方向に増やしていく方法になると思いますし
後者は、棚番で上書きする方法になると思います。
その辺は、どの道、処理を書かなくてはならないと思いますので、ご自身で
変更してみてください。(変更ポイントを記します)
ユーザーフォームのオブジェクト作成は、大丈夫そうなので説明しませんが
列などあっているかも検証してください。
文字数オーバーになるようなので、分けて投稿します。
すべてユーザーフォームモジュールに書きます。
Option Explicit
Dim Rng As Range
Private Sub ComboBox1_Change()
If ComboBox1.Value = "在庫補充" Then CommandButton1.Caption = "在庫補充"
If ComboBox1.Value = "出庫" Then CommandButton1.Caption = "出庫"
ComboBox2.Value = ""
ComboBox3.Value = ""
Label1.Caption = ""
End Sub
Private Sub ComboBox2_Change()
ComboBox3.Value = ""
Label1.Caption = ""
End Sub
Private Sub ComboBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim i As Long, valCmb As String
Dim varMax As Integer
If IsNull(ComboBox2.Value) Then Exit Sub
valCmb = ComboBox2.Value
Set Rng = Worksheets("型式表").Range("A:A").Find(valCmb)
If ComboBox1.Value = "在庫補充" Then varMax = Rng.Offset(, 4).Value - Rng.Offset(, 5).Value
If ComboBox1.Value = "出庫" Then varMax = Rng.Offset(, 5).Value
Label1.Caption = " 棚№: " & Rng.Value & " 形式 : " & Rng.Offset(, 1).Value & vbCrLf & vbCrLf & _
" 図番・符号: " & Rng.Offset(, 2).Value & " 図番・符号: " & Rng.Offset(, 3).Value & vbCrLf & vbCrLf & _
" 最大保管数量 : " & Rng.Offset(, 4).Value & " 現在庫数: " & Rng.Offset(, 5).Value & " 必要補充数: " & Rng.Offset(, 4).Value - Rng.Offset(, 5).Value
With ComboBox3
.Clear
For i = 1 To varMax
.AddItem i
Next
.ListIndex = varMax - 1
End With
End Sub
Private Sub UserForm_Initialize()
Dim myArray As Variant
Dim i As Integer
With ComboBox1
.AddItem "在庫補充"
.AddItem "出庫"
.ListIndex = 0
End With
CommandButton1.Caption = "在庫補充"
With Worksheets("型式表")
myArray = .Range(.Cells(2, 1), .Cells(Cells(Rows.count, 1).End(xlUp).Row, 6))
End With
With ComboBox2
.ColumnCount = 4
.TextColumn = 2
.ColumnWidths = "40;60;60;60"
.BoundColumn = 1 '値列
.List() = myArray
End With
With ComboBox3
For i = 1 To 18
.AddItem i
Next
End With
End Sub
Private Sub CommandButton1_Click()
Dim errmsg As String
Call error_check(errmsg)
If Len(Trim(errmsg)) <> 0 Then
MsgBox errmsg
GoTo endoutput
End If
'---メイン処理
Call 在庫補充(Rng)
'---
endoutput:
End Sub
Private Sub CommandButton2_Click()
Unload Me
End Sub
Private Sub error_check(errmsg As String)
If ComboBox1.Value = "" Then errmsg = errmsg & "摘要欄: 選択してください。 " + vbNewLine
If IsNull(ComboBox2.Value) Then errmsg = errmsg & "棚№形式:選択してください。 " + vbNewLine
If ComboBox3.Value = "" Then errmsg = errmsg & "入出庫数:入力または、選択してください。 " + vbNewLine
End Sub
Qchan1962様 ありがとうございます。
このコードを試させて頂きましたところ、2点ほど教えて欲しいことがありました。
1点目。履歴として残し棚番で上書きせず、行下方向に増やしていく方法をとりたいと思いますがどこを変更すればよいのか?
2点目。入庫個数選択を1~18にしたいです。
なぜなら最大保管在庫数よりも入庫数が一時的に上回る時があるからです。
素晴らしくハイレベルなことをされており、私なんかでは到底応用もできませんで、おんぶにだっこで申し訳なく、感謝と尊敬しかありません。
よろしくお願いいたします。
No.5
- 回答日時:
>私の説明よりもbookを載せるのが確かに手っ取り早く
>名案ですが、ここに載せれるのですか?
10年程前ですがその方法は『ネット上のマナーとして不適切』と言う回答者間でのやり取りもあって、その前までは勧めてましたがそれをやめました。
実際Bookをアップして質問できる掲示板もありましたが、ウィルスを仕込むなどの危険性に対して管理者側が無対応ってのも問題だったのか、その掲示板は閉鎖になりました。
今回の提案は回答者側がBookをアップしてそちらでチェックして貰いって感じで書きましたが、やはりウィルスや意図しない動きを故意に仕込むなどで問題になってもって事でやめた方が良いのかなと。
それならキチンと契約した人に作成依頼をされるのが望ましいでしょう。
おはようございます。
そういう意味でしたか。
勘違いしておりました。
それなら十分解りやすく説明してくださっているので大丈夫です。
No.4
- 回答日時:
こんばんは、
>
この手動で入力してしたのをまず在庫更新ボタンを押しユーザーフォームを出し
1⃣適用2⃣棚№3⃣・4⃣入庫数OR出庫数
1⃣、2⃣、3⃣・4⃣を選択しOKボタンでそれぞれの列入力されるようにしたいのです。
※2⃣に関しましては画像のように棚№・型式・図番・符号が見えて選べるようにしたいのです。
これは、おかしいように思いますが、、手動で入力してしたデータでユーザーフォームを出しているのに、2⃣で変更してしまうと言う事でしょうか?
変更する可能性があるのであれば、初めからユーザーフォームで選択してデータを書き込めば良いと思います。
チェック代わりにユーザーフォームを使うなら、下記のような感じで良いのかな?
①(添付図)
Sub Form_Show()
Dim Target As Range
Set Target = Worksheets("入出庫表").Cells(Rows.count, "B").End(xlUp)
If Target = "" Then MsgBox ("棚№を入力してください。"): Exit Sub
If Target.Offset(, 1) = "" And Target.Offset(, 2) = "" Then _
MsgBox ("入庫数又は出庫数どちらか1つを入力してください。"): Exit Sub
If Target.Offset(, 1) <> "" And Target.Offset(, 2) <> "" Then _
MsgBox ("入出庫同時作業は出来ません。入庫数又は出庫数どちらか1つを入力してください。"): Exit Sub
UserForm2.Show
End Sub
Private Sub UserForm_Initialize()
Dim Rng As Range, Target As Range
Dim Apy As String, maxV As Integer
Dim i As Integer, inpV As Integer
Set Target = Worksheets("入出庫表").Cells(Rows.count, "B").End(xlUp)
Set Rng = Worksheets("型式表").Range("A:A").Find(Target.Value)
If Target.Offset(, 1) <> "" Then
Apy = "<入庫処理>"
inpV = Target.Offset(, 1)
maxV = Rng.Offset(, 4) - Rng.Offset(, 5)
Else
Apy = "<出庫処理>"
inpV = Target.Offset(, 2)
maxV = Rng.Offset(, 5)
End If
If inpV > maxV Then
MsgBox ("入力値が範囲を超えています。修正して入力します。")
inpV = maxV
End If
With ComboBox1
For i = 1 To maxV
.AddItem i
Next
.ListIndex = inpV - 1
End With
Label1.Caption = Apy & vbCrLf & vbCrLf & _
" 棚№: " & Rng.Value & _
" 形式 : " & Rng.Offset(, 1).Value & vbCrLf & vbCrLf & _
" 図番・符号: " & Rng.Offset(, 2).Value & _
" 図番・符号: " & Rng.Offset(, 3).Value & vbCrLf & vbCrLf & _
" 最大保管数量 : " & Rng.Offset(, 4).Value & _
" 現在庫数: " & Rng.Offset(, 5).Value & _
" 必要補充数: " & Rng.Offset(, 6).Value
End Sub
UserFormに Label1、ComboBox1 を設置 、さらにCommandButtonを設置して実行プログラムを書きます。
②
もし、UserFormから個々を入力していくなら、ざっくり
Private Sub ComboBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim Rng As Range
Dim i As Long, valCmb As String
If IsNull(ComboBox2.Value) Then Exit Sub
valCmb = ComboBox2.Value
Set Rng = Worksheets("型式表").Range("A:A").Find(valCmb)
Label1.Caption = " 棚№: " & Rng.Value & " 形式 : " & Rng.Offset(, 1).Value & vbCrLf & vbCrLf & _
" 図番・符号: " & Rng.Offset(, 2).Value & " 図番・符号: " & Rng.Offset(, 3).Value & vbCrLf & vbCrLf & _
" 最大保管数量 : " & Rng.Offset(, 4).Value & " 現在庫数: " & Rng.Offset(, 6).Value & " 必要補充数: " & Rng.Offset(, 6).Value
End Sub
Private Sub UserForm_Initialize()
Dim myArray As Variant
Dim i As Integer
With ComboBox1
.AddItem "在庫補充"
.AddItem "出庫"
.ListIndex = 0
End With
With Worksheets("型式表")
myArray = .Range(.Cells(2, 1), .Cells(Cells(Rows.count, 1).End(xlUp).Row, 6))
End With
With ComboBox2
.ColumnCount = 4
.TextColumn = 2
.ColumnWidths = "40;60;60;60"
.BoundColumn = 1 '値列
.List() = myArray
End With
With ComboBox3
For i = 1 To 18
.AddItem i
Next
End With
End Sub
Private Sub CommandButton1_Click()
Dim errmsg As String
Call error_check(errmsg)
If Len(Trim(errmsg)) <> 0 Then
MsgBox errmsg
GoTo endoutput
End If
'---メイン処理
'---
endoutput:
End Sub
Private Sub error_check(errmsg As String)
If ComboBox1.Value = "" Then errmsg = errmsg & "摘要欄: 選択してください。 " + vbNewLine
If IsNull(ComboBox2.Value) Then errmsg = errmsg & "棚№形式:選択してください。 " + vbNewLine
If ComboBox3.Value = "" Then errmsg = errmsg & "入出庫数:入力または、選択してください。 " + vbNewLine
End Sub
UserFormに Label1、ComboBox1、ComboBox2、ComboBox3を設置 、さらにCommandButtonを設置して '---メイン処理に実行プログラムを書きます。

Qchan1962様 いつも貴重な知識と時間を使って下さり感謝します。
コードをコピーして使わせて頂きましたところ、②の個々を入力していくやり方にしたく思いました。
まずユーザーフォームを開くボタンをクリック。
次にコンボボックス1で在庫補充を選択した場合。
次にコンボボックス2で棚№を選択。
次にコンボボックス3で個数を選択。
するとLABEL1に棚№・型式・図番が現れて感動しました。
ここからcommandbutton1をクリックしたら
ワークシート”入出庫表”A列に摘要 ”在庫補充”が入り
ワークシート”入出庫表”B列に棚№が入り
ワークシート”入出庫表”C列に入庫数が入り、
Sub在庫更新()のコードを足して
ワークシート”入出庫表”E列に記入日時、F列に型式、G列に入出庫数、H列に現在の在庫数、I列に状況”更新済み”が入り
ワークシート”型式表”F列に現在の在庫数が反映されるという流れにしたいのですがそれは可能でしょうか?
また、ユーザーフォームで出庫を選択した場合は
ワークシート”入出庫表”D列に出庫数が入るようにしたいです。
説明力が乏しくお手間かけてますがどうかよろしくお願いいたします。
No.3
- 回答日時:
初級者なので何となくですが、回答するにも文字ではなくBookをアップロードした方が早いのかなとは思えます。
(仮に正解でなくとも参考資料として)ただその方法は過去に非難されてもいますし(アップロード先のリンクが切れたらQ&Aサイトの意味がない等で)、Officeをぶっ壊した者なので作成自体も出来ませんしね。
図と文字で作成方法を解説するのもExcelがあっても初級者には(私レベルでは)厳しいでしょう。(故にベテラン回答さんへ他力本願)
めぐみん_様 アドバイスありがとうございます。
私の説明よりもbookを載せるのが確かに手っ取り早く
名案ですが、ここに載せれるのですか?
No.2
- 回答日時:
こんばんは、
示されている処理は、シート上で条件により処理内容を分け、繰り返し実行するものだと思います。それを、ユーザーフォームから行うのは、良いのですが、ユーザーフォームから何を条件に処理を行うのでしょうか?
型名に合うデータのみに行うのか、棚番から行うのか、などが解りません。
また、コンボボックスを使うにしても、リストの登録方法などは出来ているのでしょうか?(添付図が見えないので、分けてもう少し大きいサイズでアップロードしてください)
>これをユーザーフォームにし入力制ではなく、選択制にして操作性あげたいのです。
残念ながら、操作性などの向上は、どのような状況を指しているのかも伝わっていません。ユーザーフォームからだとおそらく1形式名などから1つずつ実行する事になりそうですが、、、
ユーザーフォームからなさりたい事をもう少し詳しく提示した方が良いかも知れませんね。
Qchan1962様 いつもお世話になってます。
私の説明不足、知識不足からお手数をおかけしておりますが、
どうかよろしくお願いいたします。
お探しの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列に書き込まれる。といった方法で進めたいのです。説明が足らず申し訳ございません。