
ACCESSで日付ごとに自動連番(日付+連番)する方法
ACCESSとvba、共に初心者です。
ACCESS2003を使用しています。日付ごとに自動連番する方法が知りたくいろいろ調べていたところ過去ログ(http://oshiete.goo.ne.jp/qa/726921.html)のベストアンサーさんの回答にたどりつきました。
とりあえず勉強と思い紹介されている通りにテーブル作成からフォームのレコード移動時へのコード貼り付けまで一通り行ってみましたが、自動連番とならず同じ番号のままとなってしまいます。(日付はパソコンの日付更新時にちゃんと反映されています。)
自動連番されないのは何が原因なのでしょうか。どなたかご教授の程よろしくお願いします。
例)DATEが5月5日の場合のIDへの記載値
0505001
0505001←ここが001のまま0505002にしたい。
0506001←日付が変われば0506(5月6日)に変わる。
以上、よろしくお願いいたします。
No.5ベストアンサー
- 回答日時:
No4 です。
すみません。もう1カ所、テキスト型の書き方に変えなければいけないところがありました。
> If IsNull(MaxID) Then
> Me.ID.DefaultValue = AutoID & "001"
> Else
> Me.ID.DefaultValue = AutoID & Format(Right(MaxID, 3) + 1, "000")
> End If
If IsNull(MaxID) Then
Me.ID.DefaultValue = "'" & AutoID & "001" & "'"
Else
Me.ID.DefaultValue = "'" & AutoID & Format(Right(MaxID, 3) + 1, "000") & "'"
End If
既定値に数値型で書き込んでいますから
結局、頭のゼロが失われています。
なお、No2 さんへの補足で
> 6.[自動採番月日TBLF]の[ID]プロパティの書式に0000000を記入(一桁月の場合、頭の0が消えて6桁表示となるため。)
とありますが、
書式は、見せる形だけで、実際の値は変わりません。
書式は削除してください。
問題を分かりにくくするだけです。
希望通りの動作が確認できました!!ありがとうございます。これでやっと次の課題にチャレンジできそうです。いろいろとお手を煩わせたと思いますが、ご教示ありがとうございました。
No.6
- 回答日時:
No.2です。
>3.[自動採番月日TBL]に数値型フィールド[ID]
これが問題ですね。ここがテキスト型なら問題ないですが、数値型ならコードを変える必要があります。
Private Sub Form_Current()
If Me.NewRecord = False Then Exit Sub
Dim AutoID As String
Dim MaxID As Variant
AutoID = Format(Date, "mmdd")
'MaxID = DMax("ID", "自動採番月日TBL", "Left(ID,4)=" & AutoID) 変更前
MaxID = DMax("ID", "自動採番月日TBL", "Left(Format(ID,"0000000"),4)=" & AutoID) '変更後
If IsNull(MaxID) Then
Me.ID.DefaultValue = AutoID & "001"
Else
Me.ID.DefaultValue = AutoID & Format(Right(MaxID, 3) + 1, "000")
End If
End Sub
[ID]数値型にて記載いただいたコードで実施してみましたが、「コンパイルエラー 構文エラー」となってしまいました。
NO.4さんから教えていただいたテキスト型の方法にて希望していた動作が確認できましたので、とりあえず今回はテキスト型にて実施してみようと思います。
いろいろとご教示ありがとうございました。
No.4
- 回答日時:
> 自動連番されないのは何が原因なのでしょうか。
過去ログ(http://okwave.jp/qa/q726921.html)のベストアンサーさんの回答に不備があります。
ID フィールドは「テキスト型」でなければいけません。
たまたま、12月だったからうまくいったのですね。
リンク先では
> 例)1210001
> 1210002
> |
> 1210100
> 日付は月と日にちで、連番は3桁です。
bicycle5000 さんのご希望
> 例)DATEが5月5日の場合のIDへの記載値
> 0505001
> 0505001←ここが001のまま0505002にしたい。
> 0506001←日付が変われば0506(5月6日)に変わる。
ところが実際には
DATEが5月5日の場合のIDへの記載値
505001 (数値型ですから、頭のゼロは存在しません。"0505001" ではないのです。)
リンク先で、 当日で 最大の ID を求めるロジック
AutoID = Format(Date, "mmdd")
MaxID = DMax("ID", "自動採番月日TBL", "Left(ID,4)=" & AutoID)
5月5日の場合
AutoID : "0505"
これを元に MaxID を求めています。
「ID の 左4文字が、 AutoID の値と等しい」 という条件で。
これで、なぜ MaxID が Null になるかお分かりいただけたでしょうか?
ID の 左4文字:"5050"
AutoID :"0505"
これが等しい最大のID は存在しないのです。
12月15日なら
ID の 左4文字:"1215"
AutoID :"1215"
これならうまくいきますね。
長々と書きましたが、修正は2点。
・ID をテキスト型にする
・MaxID = DMax("ID", "自動採番月日TBL", "Left(ID,4)=" & AutoID)
の抽出条件を テキスト型用に書き換える。
サービス、答えも書いちゃいますね。
MaxID = DMax("ID", "自動採番月日TBL", "Left(ID,4)='" & AutoID & "'")
この回答への補足
回答ありがとうございます。おかげさまで連番をつくるコードの仕組みは以前より理解が深まりました。
それで早速ためさせて頂いたのですが、なぜか以前と変わらず連番になりませんでした。
AutoIDでは0505という値が入っていることを確認できたのですが、フォームビューのID欄には505001と頭の0がなくなっています。Left(ID,4)で先頭の0が認識されていないのでしょうか?
No.3
- 回答日時:
No.2です。
>ご教示頂いたMuxIDの部分が001であることを確認する手段はどのように行えばよろしいのでしょうか?
使用しているフォームのコードを開いて該当の場所でF9キーを押してブレークポイントを作成して
フォームの新規入力を実行するとブレークポイントを指定した行でコードが停止します。
その際に変数にカーソルを合わせると変数に入力された値が表示されます。
※詳細は参照URLをご覧ください。
後、もうひとつ気付いたことがあります。
このコードはフォームから新規入力を実行しないと"ID"の既定値は変更されません。
テーブルを直接開いて、新規入力の場合は直前の既定値の値が入力されます。
この場合既定値を確認するには、テーブルをデザインモードで開きフィールド"ID"を選択した状態で
下方に表示されるプロパティの既定値を確認してください。
参考URL:http://hamachan4.exblog.jp/7955925/
この回答への補足
ブレークポイントやってみました。やはりMaxID=nullと表示されました。でもどうしてMaxIDに値が代入されないのかがまったく検討がつきません。基本的なことが抜けているのでしょうか。確認可能であれば、以下に私の作成手順および確認手順を記載しましたので、過不足等をご教示頂きたくお願いいたします。
■作成手順
1.空のデータボックスを作成。
2.テーブル[自動採番月日TBL]を作成。
3.[自動採番月日TBL]に数値型フィールド[ID]と適当なテキスト型フィールド[etc]を作成。
4.[自動採番月日TBL]を元にオートフォーム:表形式で[自動採番月日TBLF]を作成。
5.[自動採番月日TBLF]のフォーム-プロパティ-レコード移動時からコードビルダを選択しコードを貼り付け。
6.[自動採番月日TBLF]の[ID]プロパティの書式に0000000を記入(一桁月の場合、頭の0が消えて6桁表示となるため。)
■確認内容
1.[自動採番月日TBLF]をフォームビューで開き1つめの新規レコードをenterキーを押し[ID]から[etc]に移動し[etc]に適当な値を入力しenterキーを押す。
2.2行目の新規レコードに自動的に0505001が代入される。enterキーを押し[ID]から[etc]に移動し[etc]に適当な値を入力しenterキーを押す。
3.3行目の新規レコードに2行目のレコードと同じ[ID]0505001が代入されてしまう。
以上
No.2
- 回答日時:
話の内容から下記の部分が正常に機能してないようです
If IsNull(MaxID) Then
Me.ID.DefaultValue = AutoID & "001"
Else
Me.ID.DefaultValue = AutoID & Format(Right(MaxID, 3) + 1, "000")
End If
上記のELse以下でカウントアップさせるのですが、MaxIDがNull判定されるため001のままになってます。
となると原因は
MaxID = DMax("ID", "自動採番月日TBL", "Left(ID,4)=" & AutoID)
になります。
テーブル名は"自動採番月日TBL"で間違いありませんか?※TBLの半角・全角が違ってませんか?
違ってるようであれば、上記のコード内の"自動採番月日TBL"を使用してるテーブル名に変更して確認してください。
この回答への補足
早速のご回答ありがとうございます。
>テーブル名は"自動採番月日TBL"で間違いありませんか?※TBLの半角・全角が違ってませんか?
コード内のテーブル名の記述と実際のテーブルの名前を確認しましたが、ファイル名は同じで、どちらもTBL部分は英大文字の半角表示でした。
ご教示頂いたMuxIDの部分が001であることを確認する手段はどのように行えばよろしいのでしょうか?
No.1
- 回答日時:
一件目の書き込み成功時に、[自動採番月日TBL]![ID]を確認しましたか?
001になってますか?これがうまく行ってないと思いますよ。(レコードが無いor000のまま)
この回答への補足
早速のご回答ありがとうございます。
>一件目の書き込み成功時に、[自動採番月日TBL]![ID]を確認しましたか?001になってますか?
[自動採番月日TBL]を開いて[ID]を確認すると001ではなく0505001という値が入っています。
確認箇所は正しいでしょうか。ここが問題ない場合は次にどこを確認すればよろしいでしょうか。ご教示お願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Access(アクセス) Accessのクエリの結果を、既存のエクセルに追加したい 2 2022/07/31 22:44
- Excel(エクセル) エクセルの数式で教えてください。 2 2023/01/10 09:15
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- Excel(エクセル) Excel セルに入っている日付を参照して、別シートのリストを表示させたい 1 2022/04/12 17:02
- Access(アクセス) Accessフォーム 一部のレコードだけを抽出する方法について 1 2022/06/28 18:45
- Access(アクセス) Access DTPickerの初期表示月を変えたい 1 2022/08/02 08:55
- Excel(エクセル) エクセルでカレンダーを作りたい 5 2023/05/16 07:32
- 借地・借家 最後の月の家賃の支払いについて 1 2023/05/20 19:02
- その他(Microsoft Office) 1の行を固定した上でVBAを用いて日付順に自動並べ替え 2 2022/06/06 15:09
このQ&Aを見た人はこんなQ&Aも見ています
-
ACCESSの自動連番について
Access(アクセス)
-
Accessで日付が変わると番号がリセットされる自動採番がしたい
Access(アクセス)
-
access 自動採番 年が変わるごとに0001に戻る仕組み。
その他(データベース)
-
-
4
ACCESSで1月1日~12月31日までの日付を入れる方法
その他(データベース)
-
5
accessでオートナンバーを使わずに「文字+数字」の自動採番する方法
Access(アクセス)
-
6
AccessでIDを入力したら他の項目も自動で表示
Access(アクセス)
-
7
ACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ
Access(アクセス)
-
8
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
9
Accessのマクロでモジュールを実行させたい。
Access(アクセス)
-
10
Access 同じデータをたくさんのレコード(同一列)に一度に入力するには
Access(アクセス)
-
11
Accessで別テーブルの値をフォームに表示したい
その他(データベース)
-
12
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
13
アクセスで追加した項目に全て同じ値を一発で入れたい
Access(アクセス)
-
14
「Access」のフォームで、同じデータの入力の手間を省くには?
Access(アクセス)
-
15
アクセスで#エラーを表示させない方法は?
Access(アクセス)
-
16
Access 別フォームへの再クエリ(更新)がしたい。
その他(データベース)
-
17
ACCESS クエリの抽出条件に他のテーブルの値を参照する方法
Access(アクセス)
-
18
ACCESS クエリで1から順番に番号を表示したい
Access(アクセス)
-
19
【Access】Dcount関数の複数条件で順位を付ける方法について
Access(アクセス)
-
20
Access レポート印刷するときに1ページに収める方法
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
マクロボタンを押すと、ファイ...
-
日付の大小の表現
-
「24日の0時」って・・・
-
差し込み印刷に当日の日付が入...
-
「時間」、「期日」、「日付」...
-
回覧板の日付について質問です...
-
Excelについて
-
差込印刷 縦書きで和暦(漢数...
-
エクセルで日付別にシートを分...
-
メールの返信が間違ってるので...
-
エクセル マクロ 名前を付けて...
-
エクセルで日付け表示で、明治...
-
ACCESSで日付ごとに自動連番(...
-
EXCELで日付を****年上期、****...
-
2つの日付の中間の日付 エク...
-
AccessのDMax関数の複数条件式...
-
Access 使用期限を設定するこ...
-
Excel2007の入力規則に関する質問
-
アマゾンアソシエイトのレポー...
-
ACCESSVBAのseekで複数INDEX検...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
マクロボタンを押すと、ファイ...
-
「24日の0時」って・・・
-
回覧板の日付について質問です...
-
日付の大小の表現
-
差し込み印刷に当日の日付が入...
-
「時間」、「期日」、「日付」...
-
エクセル マクロ 名前を付けて...
-
エクセルで日付別にシートを分...
-
EXCELで日付を****年上期、****...
-
履歴書の日付間違いで落ちますか。
-
Excelについて
-
フォームの値をクエリーに反映...
-
エクセルで6ヵ月後を自動入力で...
-
会社や役所などに提出する書類...
-
日付以外のデータを抽出したい...
-
ACCESSで日付ごとに自動連番(...
-
エクセルで日付け表示で、明治...
-
Excelで1週間毎の集計(今週と...
-
Excelでヘッダに前日の日付を表...
-
2つの日付の中間の日付 エク...
おすすめ情報