• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ユーザーフォーム上での採番のVBAのコード)

ユーザーフォーム上でのトータル管理No.採番のVBAコード

このQ&Aのポイント
  • Excel2007でトラブル履歴シートの入力フォームを作成するためにユーザーフォームを使用しています。
  • 管理方式であるトータル管理No.と発行No.の採番を行うために、VBAコードを作成します。
  • トータル管理No.の桁数は4桁または5桁で、発行No.は月が変わると0001になるように設定します。

質問者が選んだベストアンサー

  • ベストアンサー
  • mt2015
  • ベストアンサー率49% (258/524)
回答No.4

こんな感じでしょうか。 Text1 がトータル管理No、Text2が月単位管理Noが入るテキストボックス、 Text3がトラブル発生日を入力するテキストボックスとします。 Text3に日付を入れた後、コマンドボタンをクリックします。 Private Sub CommandButton1_Click()    '発生日の確認    sOccDate = TextBox3.Text    If IsDate(sOccDate) = False Then       MsgBox ("発生日が不正です")       Exit Sub    End If    dOccDate = CDate(sOccDate)    sOccMonthS = Format(CDate(sOccDate), "YYYY/MM/01")    sOccMonthE = DateAdd("M", 1, DateValue(sOccMonthS))    With Worksheets("Sheet2")       '新トータル管理No       nTotal = Application.WorksheetFunction.Max(.Range("B:B")) + 1       TextBox1.Text = Format(nTotal, "00000")           '新月単位管理No       nCount = Application.WorksheetFunction.CountIfs(.Range("F:F"), ">=" & sOccMonthS, .Range("F:F"), "<" & sOccMonthE) + 1       TextBox2.Text = Format(CDate(sOccDate), "YYYY-MM-") & Format(nCount, "000")    End With End Sub

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

「最終番号」という名の数字を、ユーザーフォーム閉じて、別の日など次の機会に作業する場合に、データを引き継ぎたい場合のテクニックとしては、作業終了時に、テキストファイルで保存しておいて、次の作業時に開いて最終番号を知る、というやり方が最適かつ簡単ではないかな。PUBLIC変数とか、プログラムの変数は使えない仕組みと思う。固定メモリに保存しなくてはならないと思う。 高等な分野の話だが、一般にINIファイルなどでこの考えは使われているように思う。 https://ja.wikipedia.org/wiki/INI%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB それ用に、馴染みのエクセルのセルに保存する手もある。専用のシートを作る手もあるが、一般シートでは「なんだこれは?」と目障りかと思う。テキストファイルが一番簡単で処理が軽いとおもう、し表面に出さないでも済む.メモ帳で修正も簡単である。 ーー デスクトップに「最終番号」ファイルを作った。 中身(メモ帳で)は、たとえば、最終番号の意味で 34 ーー UserForm_Initializeイベントで Private Sub UserForm_Initialize() Open "C:\Users\xxx\Desktop\最終番号.txt" For Input As #1 Input #1, a MsgBox a UserForm2.TextBox1.Text = a Close #1 End Sub 実行すると、ユーザーフォrムのテキストボックスに34が出る。 #1の「1」やUserForm2の「2」や.TextBox1の「1」は、ユーザーの状況により変わるので注意。使い終わったらClose #1 をすること。 ほかに、正しくは、「次の」番号を使うときは、=Val(a)+1が正しいだろうが、説明のためのテストなので最終番号を表示している。

  • mt2015
  • ベストアンサー率49% (258/524)
回答No.2

補足願います。 発行No(月単位管理)の年月は、トラブル発生日の年月ですか?それとも登録日の年月ですか? 内容的にはAccess向きですね。

sg3302153
質問者

補足

発行No.はトラブル発生日の年月になります (例) 管理No.→0001 発生日→2016/12/22 発行No.2016-12-001

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.1

こんにちは 画像の発行Noで 2016-11-001が2件有ったり、2016-12が005から始まっているのは間違いですよね? Sub test()   Dim r    As Range   Dim 発生年月 As String      発生年月 = Format(#12/1/2016#, "yyyy-mm") 'ユーザーフォームの発生日にする事      With Worksheets("Sheet2")     '管理No     MsgBox Format(.Range("B" & Rows.Count).End(xlUp) + 1, "0000")     '発行No     Set r = .Range("C" & Rows.Count).End(xlUp)     If r Like 発生年月 & "*" Then       MsgBox 発生年月 & "-" & Format(Split(r, "-")(2) + 1, "000")     Else       MsgBox 発生年月 & "-001"     End If   End With End Sub を修正して組み込んでみて下さい。

sg3302153
質問者

お礼

早速のソースコードありがとうございます。 説明が上手くなくすいません。 入力者が数人いますので、使い勝手が良く管理しやすい物と思い、他にも色々とやっていて、リリース前の不具合や改善点がないかと、やっている最中なので、表示は気にしないでください。 自分でもサイトを利用しながら、作りあげていっているので、色々と不具合がありますが・・・ あと、1点ありますがこの問題が解決したら、 あらためて投稿しますので、その際はアドバイスをお願いします。