ここから本文です

[Excel_VBA】コードを教えてください 以前、ここで在庫表の入出庫数を登録する...

bhu********さん

2016/9/2000:44:13

[Excel_VBA】コードを教えてください

以前、ここで在庫表の入出庫数を登録するVBAのコードを教えていただきました。

実際に運用したところ運用上ひとつ問題点が発生してしまい追加機能をつけたいのですが、いかんせんコードがわからないため、再度どなたか教えていただけませんでしょうか。
問題点は、一度入力したセルの値に加算するケースが発生した場合、値を上書きするしかないため注意深く入力しないと結果が違ってくるということです。
表の仕様としては、シートのフォームにオプションボタンで入庫/出庫を選択し、「日付」「品目」「数量」を入力しボタンを押すと、入力したデータが表中の該当するセルに転記されるというものです。
同一の日付で同じ品目を入力後に、追加入力しなければいけなくなった場合、何も知らず入力してしまうため時々在庫の差異がでてしまいます。(サンプルのファイルを添付いたします)
そこで、できるのであれば以下のようなロジックを考えましたがコードがわからないため手も足もでません…

①シートフォームに入力してボタン1を押すと該当するセルが空欄であればそのまま登録
②空欄でなかった場合、下図のようなユーザーフォームをだす
③フォーム上の取得用のテキストボックスに入力されているセルの値を取り出す
④フォーム上の加算用のテキストボックスに加算する値を入力
⑤ボタンを押すと③の値と④の値の合計を該当するセルに登録する。
⑥画面が入力箇所にフォーカス
(ちなみにフォームのレイアウトにわこだわっていません結果的に加算できれば違う形になってもかまいません)

上記のようなことができるのであれば…
運用の際、まれにC/Sが空欄で区分のみ数値が入力するる状況もあり、加算するとき区分のみ加算という対応もできればと思います。

サンプルファイル(ほぼ実物と同じです)⇒ http://yahoo.jp/box/y5_ULo
コードは意味がほとんど理解できませんが、何卒宜しくお願いします。

空欄,セル,フォーム,テキストボックス,コード,Exit Sub,TextBox2.Text

閲覧数:
174
回答数:
1
お礼:
500枚

違反報告

ベストアンサーに選ばれた回答

2016/9/2104:00:39

以下のコードでいかがでしょうか。
UserFormの各テキストボックスはTextBox1、TextBox2、TextBox3、TextBox4、ボタンはCommandButton1という名前であると仮定しています。


①標準フォームのボタン1_Click()を以下のコードに置き換えて下さい。

Sub ボタン1_Click()
'シートへの転記位置を設定する
r = Application.Match(Range("C8"), Range("C12:C35"), 0)
If VarType(r) = vbError Then
MsgBox "品目が見つかりません"
Exit Sub
Else
r = r + 11
End If
c = Application.Match(Range("E4"), Rows("10:10"), 0)
If VarType(c) = vbError Then
MsgBox "日にちが見つかりません"
Exit Sub
Else
c = c - (Val(Range("D2").Value) = 1)
End If

'転記位置が空欄のときはそのまま登録してフォームは表示しない
If Cells(r, c).Value = "" Or Cells(r + 1, c).Value = "" Then
Range("E6:E7").Copy
Cells(r, c).Resize(2).PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
Else
UserForm1.r = r
UserForm1.c = c
UserForm1.Show
End If
End Sub



②ユーザーフォームのコードモジュールに以下のコードをコピペして下さい。

Public r As Variant
Public c As Variant

Private Sub CommandButton1_Click()
'TextBoxに数値が入力されているか判定する
If Not IsNumeric(TextBox1.Text) Then
MsgBox ("取得値(c/s)に値を入力して下さい。")
Exit Sub
End If
If Not IsNumeric(TextBox2.Text) Then
MsgBox ("取得値(区分)に値を入力して下さい。")
Exit Sub
End If
If Not IsNumeric(TextBox3.Text) Then
MsgBox ("加算値(c/s)に値を入力して下さい。")
Exit Sub
End If
If Not IsNumeric(TextBox4.Text) Then
MsgBox ("加算値(区分)に値を入力して下さい。")
Exit Sub
End If

'加算した値をシートに転記する
Range("E6").Value = Val(TextBox1.Text) + Val(TextBox3.Text)
Range("E7").Value = Val(TextBox2.Text) + Val(TextBox4.Text)

Range("E6:E7").Copy
Cells(r, c).Resize(2).PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
Me.Hide

MsgBox "登録しました"

Unload Me
End Sub

Private Sub UserForm_Initialize()

'TextBoxの初期設定を行う
TextBox1.IMEMode = fmIMEModeDisable
TextBox2.IMEMode = fmIMEModeDisable
TextBox3.IMEMode = fmIMEModeDisable
TextBox4.IMEMode = fmIMEModeDisable
TextBox1.TextAlign = fmTextAlignRight
TextBox2.TextAlign = fmTextAlignRight
TextBox3.TextAlign = fmTextAlignRight
TextBox4.TextAlign = fmTextAlignRight

'Sheet1に入力されている値を転記する
With Worksheets("Sheet1")
TextBox1.Text = Range("E6").Value
TextBox2.Text = Range("E7").Value
End With
End Sub

以下のコードでいかがでしょうか。...

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

質問した人からのコメント

2016/9/21 21:40:37

大変失礼しました。差し替えの返信見逃していました…
すべて理想どおりです。
明日から早速使用します
重ね重ね、ほんとうにありがとうございました。

このカテゴリの投票受付中の質問

一覧を見る

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる