ACCESSで日付ごとに自動連番(日付+連番)する方法
- ACCESS2003を使用して日付ごとに自動連番する方法が知りたい。
- 過去ログのベストアンサーさんの回答によると、テーブル作成からフォームのレコード移動時へのコード貼り付けまで行う必要があるが、自動連番されない原因がわからない。
- 質問者は、日付ごとに異なる連番を付けたいが、同じ番号のままになってしまう。日付が変われば連番も変わる仕組みを作りたい。
- ベストアンサー
ACCESSで日付ごとに自動連番(日付+連番)する方法
ACCESSで日付ごとに自動連番(日付+連番)する方法 ACCESSとvba、共に初心者です。 ACCESS2003を使用しています。日付ごとに自動連番する方法が知りたくいろいろ調べていたところ過去ログ(http://okwave.jp/qa/q726921.html)のベストアンサーさんの回答にたどりつきました。 とりあえず勉強と思い紹介されている通りにテーブル作成からフォームのレコード移動時へのコード貼り付けまで一通り行ってみましたが、自動連番とならず同じ番号のままとなってしまいます。(日付はパソコンの日付更新時にちゃんと反映されています。) 自動連番されないのは何が原因なのでしょうか。どなたかご教授の程よろしくお願いします。 例)DATEが5月5日の場合のIDへの記載値 0505001 0505001←ここが001のまま0505002にしたい。 0506001←日付が変われば0506(5月6日)に変わる。 以上、よろしくお願いいたします。
- bicycle5000
- お礼率33% (2/6)
- オフィス系ソフト
- 回答数6
- ありがとう数14
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
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桁表示となるため。) とありますが、 書式は、見せる形だけで、実際の値は変わりません。 書式は削除してください。 問題を分かりにくくするだけです。
その他の回答 (5)
- mshr1962
- ベストアンサー率39% (7418/18948)
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さんから教えていただいたテキスト型の方法にて希望していた動作が確認できましたので、とりあえず今回はテキスト型にて実施してみようと思います。 いろいろとご教示ありがとうございました。
- bonaron
- ベストアンサー率64% (482/745)
> 自動連番されないのは何が原因なのでしょうか。 過去ログ(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が認識されていないのでしょうか?
- mshr1962
- ベストアンサー率39% (7418/18948)
No.2です。 >ご教示頂いたMuxIDの部分が001であることを確認する手段はどのように行えばよろしいのでしょうか? 使用しているフォームのコードを開いて該当の場所でF9キーを押してブレークポイントを作成して フォームの新規入力を実行するとブレークポイントを指定した行でコードが停止します。 その際に変数にカーソルを合わせると変数に入力された値が表示されます。 ※詳細は参照URLをご覧ください。 後、もうひとつ気付いたことがあります。 このコードはフォームから新規入力を実行しないと"ID"の既定値は変更されません。 テーブルを直接開いて、新規入力の場合は直前の既定値の値が入力されます。 この場合既定値を確認するには、テーブルをデザインモードで開きフィールド"ID"を選択した状態で 下方に表示されるプロパティの既定値を確認してください。
補足
ブレークポイントやってみました。やはり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が代入されてしまう。 以上
- mshr1962
- ベストアンサー率39% (7418/18948)
話の内容から下記の部分が正常に機能してないようです 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であることを確認する手段はどのように行えばよろしいのでしょうか?
- bin-chan
- ベストアンサー率33% (1403/4213)
一件目の書き込み成功時に、[自動採番月日TBL]![ID]を確認しましたか? 001になってますか?これがうまく行ってないと思いますよ。(レコードが無いor000のまま)
補足
早速のご回答ありがとうございます。 >一件目の書き込み成功時に、[自動採番月日TBL]![ID]を確認しましたか?001になってますか? [自動採番月日TBL]を開いて[ID]を確認すると001ではなく0505001という値が入っています。 確認箇所は正しいでしょうか。ここが問題ない場合は次にどこを確認すればよろしいでしょうか。ご教示お願いします。
関連するQ&A
- ACCESSの自動連番について
ACCESS2000を使っています。 自動連番を通常すると1・2・3・・・と自動で連番を作成してくれますが、それを日付+連番というものに出来ますでしょうか? 例)1210001 1210002 | 1210100 日付は月と日にちで、連番は3桁です。 数字の連番の方は、日付が変わるとまた1に戻るようにしたいです。 何か良い方法があったら教えてください。
- ベストアンサー
- オフィス系ソフト
- アクセスで日付をシリアル値にして使いたい
アクセス初心者です 日付を入力時に自動でシリアル値を表示したいのですが、VBAなどを使わずに表示させる方法はありませんか? 例 日付 シリアル値 2016年1月2日 42371 みたいな感じです 宜しくお願いいたします
- ベストアンサー
- オフィス系ソフト
- アクセス日付時刻の自動入力について。
アクセス2000を使用しています。 日付入力を自動的に本日の日付で入力出来るように、 =Date()としたのですが、これに、時間もつけるようにしたいのと、表示を、平成**年**月**日**時**分としたいのですが、どのようにすればよいのでしょうか?? ちなみにVBAはむずかしくて使用出来ません。
- ベストアンサー
- その他(データベース)
- excelの関数かマクロで連番、日付を付けたい
こんばんわ、EXCELマクロ入門者です。 excelの関数かマクロ、VBAで日付や、連番を付けたいです。 できれば関数でできたらなぁと思います。マクロ、VBAはほとんど初めてです。 (1)まず、B2に商品名を入れます。 (2)すると、A2に連番、C2に今日の日付(システム日付)、 D2に商品名と今日の日付、商品ごとの連番が自動的に振っていく感じにしたいです。毎日たくさん入力するらしいのでマクロとかVBAとか関数で作ってくれと頼まれました。 A列は例えばA3に=if(B3="","",A2+1)を入れて何とかできたのですが、 C列の日付(today関数やnow関数ではファイルを開き直すと日付が変わってしまう)とD列の商品名-日付-商品ごとの連番で特に困っています。 イメージとしては下のような感じです。 A B C D 1 連番 商品名 日付 商品名-日付-商品ごとの連番 2 1 ○○○ 2007/8/10 ○○○-2007/8/10-1 3 2 ××× 2007/8/12 ×××-2007/8/12-1 4 3 △△△ 2007/8/13 △△△-2007/8/13-1 5 4 ○○○ 2007/8/15 ○○○-2007/8/15-2 6 5 ○○○ 2007/8/16 ○○○-2007/8/16-3 どなたか、ご教授ください。 どうぞ、宜しくお願い致します。
- ベストアンサー
- オフィス系ソフト
- Access97での日付自動入力について
「日付」、「顧客名」、「記録(メモ)」の3つのフィールドから構成されるデータベースを作ろうとしています。このうち「日付」の部分に、自動的にレコード入力時の年月日を入れる方法はないでしょうか。
- ベストアンサー
- オフィス系ソフト
- Access2000 連番の振り方
次のようなテーブルに対して連番を振りたいのです。 伝票番号 日付 行番号 金額 00001 2007/01/01 1 1000 00001 2007/01/01 2 1000 00001 2007/01/01 3 1000 00002 2007/01/02 1 1000 00002 2007/01/02 2 1000 00002 2007/01/02 3 1000 以下はこのような状態で続く。 ここで知りたいのは、同日のデータに対しては伝票番号は同じ番号で 行番号のみ連番を振る。 日が変われば伝票番号は次の番号になり、行番号は新たに1から 振りなおすというものです。 クエリーでこのようなことは可能でしょうか。 やはりVBAで組まないと出来ないのでしょうか。 この方法を教えていただきたくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- FileMaker Pro日付自動入力
filemaker pro(8.5)を使っていますが、連番のついた365個のレコードに対して、その順番で来年の365日の日付を自動入力することは可能ですか?
- ベストアンサー
- その他(ソフトウェア)
- エクセルの日付連番について
不思議なのですが エクセルデータをテキストデータに変換した時の事ですが Write#ステートメントでテキストファイルに書込むと 日付が日付連番の,38745,で書込まれる時と ,#2006-01-28#,が混じって書込まれますがどうしてでしょうか? このテキストファイルをアクセスで加工する時に困るのです よろしくお願いいたします。
- 締切済み
- オフィス系ソフト
- ACCESS フォームに自動連番をふる
Accessでテーブル→クエリ→フォームと作成し、フォームから特定条件を指定して データを抽出しました。 その抽出したデータに自動連番をつける方法を教えてください。
- ベストアンサー
- オフィス系ソフト
- アクセス97のVBAで日付項目をヌルにする方法
OS WIN_XP HOME アクセス97 の VBA で、日付項目を初期化(ヌル)に するには、どのように記述すれば良いでしょうか? 例 Dim 売上日 As Date 売上日 = "" 詳細 この様に記述すると、エラーとなります。 日付タイプは、レコード作成時は、規定値を 設定しないと、始めはヌルのままなんですが、 一度日付を設定したが、やっぱりヌルにもどそう とすると、その方法が分かりません。
- ベストアンサー
- その他(データベース)
お礼
希望通りの動作が確認できました!!ありがとうございます。これでやっと次の課題にチャレンジできそうです。いろいろとお手を煩わせたと思いますが、ご教示ありがとうございました。