重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

フォームを使って入力を行っているのですが、
オートナンバーのように自動で番号を発行したいフィールドがあります。

番号の例: 20050704-001

要するにその日の日付と連番です。
連番は日付が変わるごとに001から始まるようにしたいのです。
どうすればできますか?

A 回答 (1件)

こんにちは。

KenKen_SP です。

> オートナンバーのように自動で番号を発行したいフィールドがあります。

VBA でやることになります。

下記ユーザー定義関数 NewNumber は、yyyymmdd-000 形式の番号を返します。
コードを標準モジュールに貼り付け、コード内のテーブル名やフィールド名
を書き換えて下さい。

'---ここから----------------------------------------------------------

'yyyymmdd-000 形式の番号発行関数
Public Function NewNumber() As String

  Dim strFld As String
  Dim strTbl As String
  Dim strDat As String
  Dim lngNum As Long
  
  '書き換えて下さい---------------
  strFld = "number" 'フィールド名
  strTbl = "table1" 'テーブル名
  '-------------------------------
  
  strDat = Format$(Date, "yyyymmdd")
  lngNum = Nz(DMax( _
        "Right$(" & strFld & ",3)", _
        strTbl, _
        strFld & " LIKE '" & strDat & "-*'"), 0) + 1
  NewNumber = strDat & "-" & Format$(lngNum, "000")

End Function

'---------------------------------------------------------ここまで----


使い方ですが、テーブルの規定値には直接設定できません。したがって、
フォームを作成することになりますが、方法は2つ。

1. 自動で番号を発行したいフィールドをソースとするコントロールの
  プロパティで[データ]-[規定値]欄に NewNumber() と入力する

2. Form の BeforeInsert イベントなどに次のコードを記述する

  Private Sub Form_BeforeInsert(Cancel As Integer)
    '「自動で番号を発行したいフィールド」をソースとする
    ’コントロール名に書き換える
    Me![number] = NewNumber()
  End Sub
    • good
    • 0
この回答へのお礼

ありがとうございました。
中身は理解できていませんが、
うまくいきました。
これから使用している関数などを調べて、
意味を理解したいと思います。

お礼日時:2005/07/05 12:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!