• ベストアンサー

伝票番号の自動採番について

伝票番号の採番で、西暦+5桁という仕様です。 これを、年が変わってから入力する際に 新しい年(度)+00001 としたいのですが、どのようにプログラムを組んだらいいのか分かりません。 ちなみに今までのプログラムでは Format関数や、DMax関数を使って自動採番していました。 Access2000での開発です。 どうぞよろしくお願いします。

  • holse
  • お礼率75% (3/4)

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

  • ベストアンサー
  • Watapo3
  • ベストアンサー率76% (33/43)
回答No.3

パソコンのタイマーから・・・・=システムの日付ですかね? どちらにしろできると思いますが・・・・ テーブル名:伝票 フィールド:伝票No(数値型/長整数型)       日付(日付/時刻型) Dim StrSeireki As String StrSeireki = Format(Me.日付, "yyyy") If DCount("伝票No", "伝票", "Left(伝票No,4) = " & StrSeireki) = 0 Then   Me.伝票No = StrSeireki & "00001" Else   Me.伝票No = DMax("伝票No", "伝票") + 1 End If 以上、フォーム上の日付更新時のコードです。 動作確認済み。 システムの時間をご希望であれば Me.日付 → date() にご変更を! 日付更新時に変更されないよう新規レコードのCheckは必要になるとは思いますが。 がんばって下さい。

その他の回答 (2)

  • Watapo3
  • ベストアンサー率76% (33/43)
回答No.2

伝票に日付を入力するフィールドがあるのであれば 1)format関数にて西暦の抜き出し 2)Recordset若しくはDCountによりレコード数を取得 3)レコード数0(ゼロ)の時のみ西暦+00001を伝票番号に代入 以上のような方法で如何でしょうか(^ ^)

holse
質問者

お礼

回答、ありがとうございます。 実はこの方法、一度試していたんです。 西暦の抜き出しは、伝票の日付からではなくて パソコンのタイマーからなんですけど・・・ 結果はというと、  新しい年(度)+昨年からの番号の続き という結果でして(汗) 伝票の日付からの抜き出しでも同じことだと思います。 やはりテーブルに直接入力ですかね。 いや、もうちょいがんばってみます。 それでは失礼します

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

> DMax関数を使って自動採番していました。 新しい年(度)+00000 のダミーレコードを作成しておく、ではいかがですか?

holse
質問者

お礼

回答、どうもありがとうございます。 はっきり言ってこの方法が一番手っ取り早いですよね。 でもやはり、こういうプログラムって作れるのか、という 興味と自分を試す意味でやってはみたもののなかなか・・・ まだまだ修行が足りないみたいです。(苦笑)

関連するQ&A

  • Access2003 伝票番号を自動的につけるには

    お世話になっております。 受注テーブルに[伝票番号]があって、番号を自動的につけたいと思っています。 入力用の[受注伝票]フォームがあります。 3月17日最初の入力 2006031701 3月17日の3番目の入力(最初、2番目は入力済み) 2006031703 このように日付+自動的に2桁の番号をつけたいのですが方法がわかりません。 参考になるページがあってこのように書いてみましたがエラーになりました。 [受注伝票]フォームの[伝票番号]テキストボックスプロパティの規定値 =IIf(DMax("伝票番号","受注伝票","伝票番号 Is Not Null") Is Null,CLng(Format$(Now(),"yyyymmdd"))*100+1,IIf(Left(CStr(DMax("伝票番号","受注伝票","伝票番号 Is Not Null")),8)=Format$(Now(),"yyyymmdd"),DMax("伝票番号","受注伝票","伝票番号 Is Not Null")+1,CLng(Format$(Now(),"yyyymmdd"))*100+1)) ご教授いただけると幸いです。よろしくお願いいたします。

  • 自動採番について

    初心者です。 Access2000で銀行管理DBを作っています。 (1)テーブルを入金用と出金用それぞれに作成 (2)データ入力用フォームもそれぞれに作成します。 入力にあたって入力番号を自動採番にしたいと考えてますが、番号の構成は数値10桁で、"年" + "月" + "連番"の組み合わせにしたいのです。例:2003070001 入金用と出金用それぞれ別に入力番号をつけます。 これを実現するために「採番テーブル」を別に作成しなければいけないようですが、 (1)採番テーブルの定義の方法 (2)入力フォームで自動採番するためのVBA記述の方法 についてアドバイスいただけないでしょうか? よろしくお願いします。

  • ACCESSでの自動採番

    立て続けの質問お許しください。 Accessで、自動採番をしていきたいのですがアドバイスお願いいたします。 フィールド1→年度 (ex.2003) フィールド2→採番番号 (ex. 01) というものを作って、フォームでフィールド1、2ともに自動採番していきたいと考えています。 (2003 01, 2003 02,・・・・というふうに自動採番していきたい) しかし、来年の4月になったらフィールド1の年度を"2004"に自動変更し、変更後、フィールド2の値を1から取り直したいのです。このようなことを自動でやるのは可能なのでしょうか? DMAX関数を使って・・・と思ったのですが、年度が変更したときにどのようにフィールド2の値を1から取り直せばいいのかが分かりません。あと、2004年4月になって初めてフィールド1の値を2004と更新したいのですがどうやればいいかわかりません。 どなたか詳しい方お願いします

  • Access 文字+年ごとの自動採番

    Accessは全くの初心者です。 プログラマーさんのサイトや質問サイトを参考に、初めてデータベースを作っているのですが、 どうしても文字+年ごとの自動採番がうまくいきません。 挿入前処理で「営250001」のように漢字1文字+和暦2桁+4桁連番にして、 年が変わるごとに4桁連番を0001に戻したいのです。 今入力してあるコードは以下の通りです。 ----------------------------------------------------------------------------- Private Sub Form_BeforeInsert(Cancel As Integer)  Dim vDt As Variant  vDt = DMax("番号", "営テーブル", "番号 Like '" & Format(Date, "ee") & "*'")  If (IsNull(vDt)) Then   番号 = "営" & Format(Date, "ee") & "0001"  Else   番号 = "営" & Left(vDt, 2) & Format(Val(Right(vDt, 4)) + 1, "0000")  End If End Sub ----------------------------------------------------------------------------- この状態では、0001のまま採番が進まず、行き詰ってしまいました。 他の質問者さんが(Date,"ee")を(Now,"nn")に置き換えて、分ごとの採番を試していたのを参考に、 「"営"&」を取って、採番が進むところまでは確認できました。 使っているのはAccess2003です。 どうか、よろしくお願いします。

  • 自動採番

    エクセルで申請があったものに対して、フォーマットのある 箇所に採番をしなければいけませんが、毎回打ち込むのは 大変です。 「○○○-070724○」「三桁の数字-yymmdd○(連番)」 (最初の三桁の数字のものに対して連番/ex”123″のものが 070724に3件発生した時に123-0707241→123-0707242→ 123-0707243となるように採番したいですが、いい方法は ないものでしょうか?○○○の部分はジャンルで、多数 存在します。 せめて「○○○-yymmdd○」の「-yymmdd○」の部分だけ でも出るようになれば楽になります。CONCATENATE関数で 「CONCATENATE("-",TODAY(),・・・」で出来ないものかと 試していますが、TODAY関数5桁数字が出てきてしまいます。 自動採番のやり方もわかりません。 自動採番出来るスタンプみたいな事はエクセルで出来ませんか? わかる方がいらっしゃいましたら、教えてください。 よろしくお願いします。   

  • Accessで指示書番号の自動採番

    入力フォームで指示書番号が自動採番され、テーブルにも保存されるようにするための方法を教えていただけないでしょうか。 テーブル:T_指示書 フィールド:指示書番号 フィールドはテキスト型で、番号の構成は8桁の番号で "年(二桁)" + "月(二桁)" +"部署番号(一桁、固定の数字)"+ "連番(三桁)" (例:09091001) という感じで、 年月が変われば、連番が001になるようにしたいです。 どなたか、ご教授いただければありがたいです。 よろしくおねがいします。 Access2002 winXP

  • access 請求番号の自動採番

    まったくわかりません! よろしくお願いします。 仕様環境 WinXP  access2002 顧客管理のシステムを作っています。 テーブル 顧客テーブル(主キーは顧客番号 テキスト型) 請求テーブル(主キーは請求番号 テキスト型) 明細テーブル(主キーは明細番号でオートナンバー ダミーみたいな感じで使っています。) そしてリレーションシップで顧客テーブル(1)→(多)請求テーブル(1)→(多)明細テーブルになっています。 顧客情報を入力するフォームを作りました。 主キーは顧客番号(テキスト型,入力モードON,インデックス いいえ)で 他のテキストボックス(例えば名前)に何かしら文字を入力すると自動で顧客番号を採番してくれます。 例:0001 0002 0003~ そしてそのフォームから請求書作成フォームに飛ぶように 「請求書作成ボタン」を作り、顧客情報も一緒にひっぱっていってくれる 請求書作成フォームを作りました。(入力したばかりの情報も最新の情報で更新してくれます。) ・・請求書作成フォームはサブフォームを使い3つのテーブルからなっています。・・ 親フォーム:顧客テーブルから。 子フォーム:請求テーブルから。 孫フォーム:明細テーブルから。 主キーは請求番号で(テキスト型,入力モードON,インデックス はい(重複なし)) 他のテキストボックス(例えば請求日)に何かしら入力すると自動で請求番号を採番してくれます。 例:A0001 そこで問題なのですが、顧客情報は入力する度、次々自動で採番してくれるんですが、 請求番号は一番最初のレコードの”A0001”だけ採番してくれて、 新しいレコードで請求書を作ろうとテキストボックスに文字を入力すると「型が一致しません」というエラーが出ます。 ○ エラー内容 アクションエラーの実行 条件 true アクション名 値の代入 引数 [請求番号],Format(DMax("請求番号","請求マスタ")+1,"A0001") マクロは・・(参考書を参考にしています、マクロ名:自動採番マクロ) ------------------------------------------------- 条件 : DCount("請求番号","請求テーブル")=0 アクション : 値の代入 アイテム  : [請求番号] 式     :"A0001" ------------------------------------------------- 条件    : ... アクション : マクロの中止 ------------------------------------------------- アクション : 値の代入 アイテム  : [請求番号] 式     : Format(DMax("請求番号","請求テーブル")+1,"A0001") ------------------------------------------------- となっています。 念のため、主キーの入力モードを切り替えたり、式の"A0001"を単純に"1"にしたりしましたが、 請求番号はエラーが発生します。 原因がまったくわかりません。 よろしくお願いします!

  • 文字を含むIDの自動採番

    Access2013を使っています。 IDはテキスト型で、 A00000000 っていう書式なんですが、 新規レコード作成時のイベントで、ID自動採番(連番をふる)をしたいのですが、下記だと最初の1レコード(A00000001)以降がエラーになってしまいます。 Format(Nz(DMax("ID", "T_テーブル名"), 0) + 1, "\A00000000" ) もちろん、すでにあるIDがA00000001なので、DMaxが使えないんですが、どうやって分けてやったら良いのかわかりません。 やりたい結果は、新規レコード作成時に、IDが"A"&"8ケタの最大値+1"が自動に振られて、テーブルのIDフィールドにA00000001、A00000002・・・とデータ保持したいのです。 説明が判り辛くて恐縮ですが、ご教示お願いします。

  • エクセルで採番できる関数

    エクセルで自動採番できる関数式がうまくできずに困っています。 考えている採番の流れは以下のとおりです。 1.B列に日付が入ると、A列に自動採番される 2.採番の値は「年月6桁」+「-(ハイフン)」+「2桁の番号」(例:201407-01) 3.「2桁の番号」は、登録の順番ごとにカウントする(例:01,02,・・・10,11・・・) 4.「2桁の番号」は、次の月に変わると1からカウントし直す(例:201407-18、201408-01) いろいろ組み合わせて下記のようなものを作ってみたのですが、うまくできません。 A2=IF(B2="","",CONCATENATE(YEAR(B2),TEXT(MONTH(B2),"00")&"-"&TEXT(IFERROR(IF(MONTH(B1)=MONTH(B2),MOD(A1,10)+1,1),1),"00"))) うまく採番できる関数式を教えて下さい。 よろしくお願い致します。

  • access 自動採番 年が変わるごとに0001に戻る仕組み。

    宜しくお願いします。 使用環境:access(2002-2007) 前回の続きでもありますが、自動で番号を採番する仕組みを作りました。 (一応、前回分も・・)http://oshiete1.goo.ne.jp/qa5742518.html 「10AA0001」から始まり、あとは後ろの数字が0002,0003~と増えていく仕様で出来ました。 最初の「10」というのは2010年のうしろ二桁の「10」です。(date関数) (相談) これを2011年になったら、後ろの数字を0001に自動的にセットし直す仕様にしたいのです、 そこから0002,0003~と増えるようにして、また年が変わるごとに0001にセットされるような仕組みにしたいです。 検索サイトで調べるとやり方が出てくるのですが、 まだVBAの理解力がないので、まったくもってわかりません。 たぶんIfで示されるDcount関数に関係があるのかなー、という気はします。 (前置きの部分なので) 僕にはちょっとレベルが高いかも知れませんが、理解できるよう努力します。 以下に、構文を書きます。 また来年になるまで「実際、変わるか検証ができない」というのもアレなので、 テスト環境ではnow関数を使い「hhnn」でやってます。 「分」が変わるごとに0001に戻れば自分なりにOKだと思っています。 (now関数で連番動作することは確認できました) ・・・・・・・・・ '------------------------------------------------------------ ' Form_BeforeInsert ' '------------------------------------------------------------ Private Sub Form_BeforeInsert(Cancel As Integer) On Error GoTo Form_BeforeInsert_Err If (DCount("見積り番号", "案件") = 0) Then 見積り番号 = "00AA0001" Exit Sub End If 見積り番号 = Right(Format(Date, "yyyy", 2), 2) & Format(DMax("Right(見積り番号,4)", "案件") + 1, "AA" & "0000") Form_BeforeInsert_Exit: Exit Sub Form_BeforeInsert_Err: MsgBox Error$ Resume Form_BeforeInsert_Exit End Sub ・・・・・・・・・ ○ now関数の場合 ※一文のみ抜粋 ・・・・・ 見積り番号 = Right(Format(Now, "hhnn", 2), 2) & Format(DMax("Right(見積り番号,4)", "案件") + 1, "AA" & "0000") ・・・・・ 教えてください、宜しくお願いします。