ID非公開さん
2022/6/22 13:45
2回答
エクセルについて 添付のようなエクセルの表を作成したいと思っております。 VBAの記載方法を教えてください。 ・管理番号(セルA)は連番ではないので手打ち入力
エクセルについて 添付のようなエクセルの表を作成したいと思っております。 VBAの記載方法を教えてください。 ・管理番号(セルA)は連番ではないので手打ち入力 ・返却日(セルD)に日付が入力された時に枝番号をつけて管理番号(セルA)の一番下に自動入力したい。 ・破棄(セルE)に『●』が入力されたときは捨番としたいので自動入力しない。 以上、どなたか詳しい方宜しくお願い致します。
Excel | Visual Basic・291閲覧・500
ベストアンサー
ご質問の件ですが、通常の標準モジュールでの対応は難しいのでは無いかと思います。 内容は面白そうなので、ユーザーフォームで入力フォームを作成して書き込ませるようにしました。 (多分、この方が楽かと思います。) お気に召さなければ、以下のコメントはスルー下さい。 かなりのところ推測で補正しています。 1.A列は、セルの書式設定で「文字列」に設定して下さい 2.貸し出す時には、一応返却予定日を記録した方がよいのではないかと考え、D列に「返却予定日」の列を追加しています。 以下は添付の入力フォームを見ながらお読みください。 3.「貸出し」、「返却」、及び「廃棄」の作業の分類は、上部のチェックボックスで分類させます。 4.貸出し時の作業(CheckBox1にチェック) ①TextBox1には、管理番号の頭の数値のみ書き込みます。 まだ、枝番号が付いた管理番号がなければ、次のTextBox2は空欄のままです。 ②既に枝番号の付いた管理番号が存在するのであれば、最新の管理番号が書き込まれます。 貴方の提示された図で言うと、例えば「4」と書き込むと末尾の最新の「4-1」がテキストボックス2に 表示されます。 TextBox3には入力不要です。(そのため背景色をグレーにしています。) ③氏名、貸出日、返却予定日をそれぞれ入力します。 ④書込みのコマンドボタンを押す。 5.返却(返却のみにチェックを入れる) ①TextBox1には、管理番号の頭の数値のみ書き込みます。 ②貸出しと同様に枝番号の管理番号が採番されていなければ、TextBox2は空白のままです。 枝番号の管理番号が採番されていれば、最新の枝番号付きの管理番号が表示されます。 ③TextBox1,TextBox2を見ながら、次の枝番号付き管理番号をTextBox3に書き込みます。 (返却の場合には、TextBox3の背景色は「白色」となります。) ④氏名、貸出日、返却予定日は、貸出し時に既に書き込まれているため入力は不要です。 ⑤書込みボタンを押します。 TextBox3に書き込まれた枝付き管理番号が、表の末尾に書き込まれます。 6.「廃棄」作業を行なう場合には、「返却」、「廃棄」のチェックボックスを共にチェックします。 枝番号付きの管理番号の採番しないため、TextBox3の書込みは不要です。 まだ、入力作業方法の改善でTab Stop、背景色の設定で不備なところがあるかと思いますが、 スルーされる可能性が大きいと思われますのでこの程度にしておきます。 7.コードは以下のプロシージャに書き込まれています。 ①フォームコントロールのボタン ユーザーフォームに配置されたコントロールのリセット、ユーザーフォームの表示を行なわせます。 Sub Sheet5_ボタン1_Click() UserForm1.CheckBox1.Value = False UserForm1.CheckBox2.Value = False UserForm1.CheckBox3.Value = False UserForm1.TextBox1.Value = "" UserForm1.TextBox2.Value = "" UserForm1.TextBox3.Value = "" UserForm1.TextBox3.TabStop = False UserForm1.TextBox3.BackColor = &HC0C0C0 UserForm1.TextBox4.Value = "" UserForm1.TextBox5.Value = "" UserForm1.TextBox6.Value = "" UserForm1.TextBox7.Value = "" UserForm1.Show End Sub ②checkbox1のクリックのプロシージャ Private Sub CheckBox1_Click() If CheckBox1.Value = True Then TextBox5.TabStop = True TextBox5.BackColor = &H80000005 TextBox6.TabStop = True TextBox6.BackColor = &H80000005 TextBox7.TabStop = False TextBox7.BackColor = &HC0C0C0 Else TextBox5.TabStop = False TextBox5.BackColor = &HC0C0C0 TextBox6.TabStop = False TextBox6.BackColor = &HC0C0C0 TextBox7.TabStop = True TextBox7.BackColor = &H80000005 End If End Sub ③checkbox2のクリックのプロシージャ Private Sub CheckBox2_Click() If CheckBox2.Value = True Then TextBox3.TabStop = True TextBox3.BackColor = &H80000005 TextBox7.TabStop = True TextBox7.BackColor = &H80000005 Else TextBox3.TabStop = False TextBox3.BackColor = &HC0C0C0 TextBox7.TabStop = False TextBox7.BackColor = &HC0C0C0 End If End Sub ④checkbox3のクリックのプロシージャ Private Sub CheckBox3_Click() If CheckBox3.Value = True Then TextBox3.TabStop = False TextBox3.BackColor = &HC0C0C0 Else TextBox3.TabStop = True TextBox3.BackColor = &H80000005 End If End Sub ⑤TextBox1のExitプロシージャ Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) For n0 = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1 If Cells(n0, 1).Value Like TextBox1.Value & "-" & "*" = True Then TextBox2.Value = Cells(n0, 1).Value Exit For End If Next End Sub ⑥書込みコマンドボタンのプロシージャ Private Sub CommandButton1_Click() '貸出し情報書き込み If CheckBox1.Value = True Then If TextBox2.Value = "" Then For n0 = 2 To Cells(Rows.Count, 1).End(xlUp).Row If Val(TextBox1.Value) = Cells(n0, 1).Value Then If Cells(n0, 3).Value <> "" Then MsgBox ("既に貸出し済みです。") Exit For Else '氏名 Cells(n0, 2).Value = TextBox4.Value '貸出日 Cells(n0, 3).Value = TextBox5.Value '返却予定日 Cells(n0, 4).Value = TextBox6.Value Exit For End If End If Next Else For n0 = 2 To Cells(Rows.Count, 1).End(xlUp).Row If TextBox2.Value = Cells(n0, 1).Value Then If Cells(n0, 3).Value <> "" Then MsgBox ("既に貸出し済みです。") Exit For Else
'氏名 Cells(n0, 2).Value = TextBox4.Value '貸出日 Cells(n0, 3).Value = TextBox5.Value '返却予定日 Cells(n0, 4).Value = TextBox6.Value Exit For End If End If Next End If
質問者からのお礼コメント
訂正までお付き合いいただきありがとうございました。 出来ました❗️ あとは自分なりにカスタマイズしていきます。 諦めてたので感動です!
お礼日時:6/29 9:40