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

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

ユーザーフォーム上での採番のVBAのコード

Excel2007でトラブル履歴シートを作成しています。入力項目が多いので、入力をしやすくする為に、ユーザーフォームを用いた入力フォームを作成しいます。それで、管理方式で管理No.(全体)と発行Noの(月単位管理)が必要になり、エクセルシート(Sheet2)内とユーザーフォーム上に下記の項目を作っています。 B列にトータル管理No. C列に月単位管理No. D列にチェック欄 E列に対策完了日 F列にトラブル発生日 あと、数項目程ありますが、 今回は、ユーザーフォームに作成したテキストボックス(トータル管理No.)にコマンドボタンをクリックしたら、B列の最終番号から次の番号を習得します。 トータル管理No.桁数は4桁若しくは5桁で、全て数字の表記での管理となります。また、発行No.では、月が変わった時に件数が、0001になるようにしたいです。どなたかVBAコードについて教えてください。

この投稿のマルチメディアは削除されているためご覧いただけません。

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

  • ベストアンサー
  • 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/17068)
回答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点ありますがこの問題が解決したら、 あらためて投稿しますので、その際はアドバイスをお願いします。

関連するQ&A

  • VBAユーザーフォーム

    VBA初心者です。ユーザーフォームを作成しシート上に一覧表示をできるように作成しました。(本を見ながらとこちらで質問等させて頂きやっとできました) なので、次にsheet1に一覧表示を作成しているので、sheet2に個別表示の仕方はどうしたらよいか教えて頂きたいです。一人の人の情報量が多く、一人分の資料もほしいのですが・・ユーザーフォームから入力後に一覧と個別とにするのはどうすれば初心者でもできますか? 質問も下手なのでわかりにくいかもしれませんが、教えて頂けたらと思います。

  • Excel2003VBA「ユーザーフォーム」

    お世話になります。 今、ユーザーフォームを作成中なのですが まず フォームを先に作成しました。 この後で それぞれの項目にコードを入れていけばよいのかな?と思って先に入れ物だけ作ったのですが 手順としは こういった感じで良いのでしょうか? ちなみにExcelのシートには直接入力出来ないようにして、フォームに入力させる為に まず一旦リストを非表示にしてボタンのみ(「フォームを表示ボタン」)表示をし、 フォームの入力に従ってリストに反映させたいのですが、勉強し始めの自分にはハードルが高過ぎるでしょうか? 作成したフォームは添付の通りです。 ご感想、その他 ご教示いただける内容等々、宜しくお願い致します。

  • エクセルVBA(ユーザーフォーム)について質問です

    たとえばユーザーフォームを表示させSheet1のA列最終行へ入力させることは出来ましたが 同時にSheet2のA列の最終行にも同じく反映させたい

  • VBAユーザーフォーム上での検索がしたい

    ユーザーフォームを作成したのですが、コードが分かりません教えて下さい。 ・ユーザーフォームは氏名を入力欄とし以下住所、電話番号等、個人情報が氏名を入力することによって、出てくるようにしたいのですが、可能ですか?個人情報はEXCELシート上にあり、随時追加されていきます。

  • エクセルVBAユーザーフォーム

    ユーザーフォームに入力後ワークシートへ転記されるのですが、そのカーソルがワークシート側に行ってしまいます。連続して入力したいのですが、ユーザーフォームにもどるようにするにはどうしたらよいのでしょうか? 教えて下さい。よろしくお願いいたします

  • エクセルVBA ユーザーフォームのボタン

    ユーザーフォームにCommandButton1があります ワークシートにもCommandButton2があります ユーザーフォーム上のCommandButton1をクリックすることで、ワークシート上のCommandButton2をクリックするという命令は作れるのでしょうか? ワークシート上のCommandButton2をクリックした後の命令は出来ているのですが、そのコードをコピーしてユーザーフォーム上のCommandButton1のコードにコピーするしかないのでしょうか? 実行ボタン(CommandButton2)をワークシートに作成したので、 ユーザーフォームで入力→ ユーザーフォーム上のボタン(CommandButton1)をクリック→ ユーザーフォームは終了→ ワークシート上の実行ボタン(CommandButton2)をクリック してくれると良いかと思いました よろしくお願いします

  • エクセルVBAユーザーフォームからブックへの入力

    エクセルVBAでユーザーフォームを作成しました。 それをどうやったらブックに反映させられるのかが分かりません・・ 項目が40以上あります。 シートの任意の場所へ数値を入力させるためのソースを教えて下さい。 また、そういったフォーマットを公開しているところがあれば教えて下さい!! 住所録など入力するサンプルを見たのですが、そのまま項目を変更して使えたらとっても嬉しいのですが・・・ 大至急なのでどなたか力を貸して下さい!! よろしくお願いします。

  • VBAでユーザーフォームのcaption表示

    VBAを初めたばかりです。 VBAでユーザーフォームを作成したのですが ユーザーフォームプロパティのcaptionで入力しても 下記プログラムで入力しても表示されません。 VBA作成時の画面にはしっかりと「項目」と 表示されていますが、プログラムを実行してユーザーフォームを 呼び出すと何も表示されていません。 ご教授ください。 Private Sub UserForm_Initialize() UserForm1.Caption = "項目" With ListBox1 .AddItem "1" .AddItem "2" End With End Sub

  • エクセル VBA ユーザーフォームで検索したいのですが

    つい昨日触り始めた大初心者です。。 エクセルシートにて 数値を記した列と、詳細を記した列があります。 ユーザーフォームにて textboxに数値を入力し、ボタンをクリックすると 検索をして、ユーザーフォーム内のlabelに詳細が表示される、といったvbaを書いているのですが、どうにもうまくいきません。 また、textboxに検索範囲にない数値が入力されたときには Labelに「なし」と表示させたいのですが、 エラーが出てしまい、その処理もやはりうまく出来ません。 どなたかご教授いただけますでしょうか。

  • エクセルVBA「ユーザーフォーム→セルへの入力」ほか

    エクセルVBA「ユーザーフォーム→セルへの入力」ほか 連日の質問にご回答頂き大変に感謝しております。 昨日投稿したユーザーフォームからのセルへ入力に関する質問です。 下記画像のようなユーザーフォームを作成したのですが、「合計」の数値をワークシートの("コンボボックスの文字列:"「番号(この場合01)」")のセル番地に入るように組みたいのですが、どんなコーディングがよろしいでしょうか。(つまり、画像の場合は「1年2組」列の「01」行に「合計」の値を入力したいのです) さらにもう一点質問致します。 VBAとそうでない部分両方の質問となるのですが、見ての通り私ベルマークを集計するためのブックを作成しています。 ベルマークの枚数を集計する方法が思いつかないのですが、ユーザーフォームを利用して、ベルマーク番号別の「点数別(0.1点・0.2点・・・)枚数」を計算したいのですが、どのようなコーディング、また、シートを作れば良いのでしょうか。お知恵を貸して頂けると幸いです。 以上ご回答いただけるとうれしいです。よろしくお願いします

専門家に質問してみよう