• ベストアンサー

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で組まないと出来ないのでしょうか。 この方法を教えていただきたくお願いいたします。

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

  • ベストアンサー
  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.4

>別にクエリを作って、これらの該当するフィールドに使用するのでしょうか。 でもいいですし、テーブル作成クエリにして別テーブルを作ってもいいし 更新クエリにして原テーブルに書き込んでもいいですよ いずれの場合も同じ式が使えます

yahoowave
質問者

お礼

みなさま、いろいろ教えていただきありがとうございました。 これらを参考に組んで行きます。

その他の回答 (3)

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.3

番号を振る順番を決めるフィールドが必要です 順序を問わないのであれば、インポート時にオートナンバーで番号を振ります(ID) 日付だけを重複無しに取り出すクエリを作ります(Q1) 伝票番号: Format(DCount("*","Q1","日付<=#" & [日付] & "#"),"00000") 行番号: DCount("*","テーブル名","日付=#" & [日付] & "# and ID<=" & [ID])

yahoowave
質問者

お礼

もう少し詳しく教えていただきたいのですが この「伝票番号: Format・・・」と「行番号: DCount・・・」は 別にクエリを作って、これらの該当するフィールドに使用するのでしょうか。

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.2

選択クエリだと日付入力時点の現在の伝票番号と行番号の最大値が分かりません。 更新クエリで行なう場合は、全レコード対象の振り直しになりますので、 通常の運用では効率が悪いです。 通常はフォームとかの更新後イベントを使ってのオートナンバー処理ですね。 DCOUNTとDMAXとDLOOKUPを使えば設定可能です。 Sub 日付_AfterUpDate() Dim GB As Long GB = DCOUNT("*","テーブル名","日付=" & Me.日付) '入力日付の件数 If GB = 0 Then '新しい日付の場合の設定 伝票番号=最大値+1 行番号=1   伝票番号 = Format(CLng(Nz(DMAX("伝票番号","テーブル名"))) + 1,"00000")   行番号 = 1  Else '既にある日付の場合の設定 伝票番号=既存の値 行番号=件数+1   伝票番号 = DLookup("伝票番号","テーブル名","日付=" & Me.日付)   行番号 = GB + 1 End If End Sub ※伝票番号 テキスト型(5桁),行番号 数値型(長整数) として作成しています。

yahoowave
質問者

お礼

koroloさま、mshr1962さま ご対応ありがとうございます。 ANo.1には補足説明をさせていただきましたのでそちらもご覧ください。 なるべくクエリーで解決できたらと思っているのです。 それは、今は私はAccessが使えるのでVBAでもいいのですが、担当が代わったりとかしてあまりAccessになじみのない方にも後々簡単にメンテナンスできるようにしたいと思ってるからです。 すみません、いろいろ言いまして。 よろしくお願いします。

  • korolo
  • ベストアンサー率42% (39/92)
回答No.1

VBを使わなくても大抵の事はマクロで出来ると思いますが、下記の点により作り方は違ってきます。 (1)データを1レコード入力する毎に採番して行く方法 (2)既に入力済みのデータに対して付番する方法(この場合は、付番する為の定義が必要です。→行番号を付って行く順番のルールの事)

yahoowave
質問者

補足

後者のパターンです。 このデータは他のシステムからCSV形式のファイルを取り込みます。 この中身は伝票番号と行番号は存在しません。 この2つの番号は会計システム側で必要となるので Accessでこの情報を追加する必要があるのです。 伝票番号は1番から始めても問題ありません。 同一日が同じ番号であればいいのです。 上限はおそらく500番ぐらいかなと思います。

関連するQ&A

  • [Access]別テーブルの最大値以降の連番振り

    過去の質問を色々調べたのですが、結局以下の連番の振り方が分からず・・・困っています。 どなたか助けて下さい。お願いいたします。 テーブルA(蓄積されている過去テーブル) 伝票番号  顧客NO  注文日 001 111111 2012/11/10 001 111111 2012/11/10 002 222222 2012/11/25 002 222222 2012/11/25 002 222222 2012/11/25 003 333333 2012/12/31 テーブルB(新規にインポートするテーブル) 004 444444 2013/02/01 004 444444 2013/02/01 005 222222 2013/02/15 005 222222 2013/02/15 006 555555 2013/02/15 006 555555 2013/02/15 上記のように、テーブルBをインポートした時に、伝票番号を「004,004,005・・・」という風に 顧客NO毎に連番を振りたいです。 DmaxやDcount関数を使う事はなんとなく分かったのですが、うまくいきません。 出来れば、クエリで実現したいと思ってます。 テーブルAにある顧客がテーブルBに出てきたとしても、関係なく連番が振れれば問題無いので、 テーブルAからは最大値+1の値だけ取れればいいです。 宜しくお願いいたします!!

  • Accessにてテーブル追加時の連番

    Accessにて、個人ごとの販売管理をするようなメイン/サブフォーム形式のフォームを作成しました。 テーブルA(メインフォーム用テーブル) ●個人CD ●氏名 ●住所  ・  ・ テーブルB(サブフォーム用テーブル) ●連番(個人CDごとに取得するよう設定) ●日付 ●個人CD ●商品CD ●個数  ・  ・ フォームにて入力する場合、連番は自動で取得するようなVBAを書いています。 追加クエリA ●日付 ●個人CD  ・  ・ ※1回の追加では、ひとつの個人CDに対して、1件分のデータ。 追加クエリAにより、テーブルBにまとめてデータを追加したい場合、 連番をどのようにして取得してよいか分かりません。 連番は、個人CDごとに振るようにしたいのですが、どのようにしたらよいでしょうか? よろしくお願いいたします。

  • ACCESSクエリーについて

    ACCESSクエリーについてですが、複数列、行が ある顧客テーブルがあり、そのデータテーブルには、 伝票番号がレコード毎にふられています。 このレコードはお客様によっては、 複数行となることもあります。 その場合は、お客様に同じ伝票番号が 複数行にわたってふられるケースも あります。 目的はクエリーで伝票番号の先頭の 行だけを引っ張りたい、です。 単に伝票番号だけを引っ張るだけであれば、 簡単にプロパティの固定値をはいに変えるだけ でできますが、伝票番号が複数存在することが ありえるなかで、伝票番号の先頭のみの 行のみ抽出させることは可能でしょうか。

  • アクセスVBA超初級

    依頼伝票を、アクセスのデータベースで、1枚ごとに入力しています。 伝票には、一意の伝票Noが振ってあります。 上段には、おおまかな、請求先や日付や、金額の総合計が入力してあり、 その下に、サブフォームとして、細かい項目分類ごとの、品目や数量、単価、小計などを 入力するようにしています。(分析用クエリ、というタイトルで) その項目分類ごとに、1行、項目が増えるごとに、項目番号として、行の始めに、 1、2、3、4、5、と、順次増えるように、自動的に、連番を振りたいのです。 Private Sub Form_BeforeInsert(Cancel As Integer) If DCount("*", "Q_分析用 クエリ") = 0 Then 項目番号 = 1 Else 項目番号 = DMax("項目番号", "Q_分析用 クエリ") + 1 End If End Sub それで、上記のようなVBEを考えたのですが、これですと、各1枚ごとの伝票に 連番が振ることができずに、全ての伝票を通しての、連番になってしまいます。 1枚ごとに、また、1から連番を振るようにするには、どうすればいいでしょうか。 わかりにくい質問で申し訳ありませんが、よろしくお願いします。

  • アクセスで条件に合うもののみに連番を振る方法は?

    下記のようにテーブル1にデータがあります。 テーブル1 ID 参加番号 級 判定 1   1   2  ◎ 2   2   1  〇 3   3   2 4   4   1  ◎ 5   5   3  ◎ 6   6   2  〇 7   7   1  8   8   3  〇 9   9   2  〇 このデータを追加クエリを使ってテーブル2に追加をします。 その時に級:昇順・参加番号:昇順で並べ替え、同時に判定が〇・◎のものに級別に証書番号として連番を振りたいと考えています。 テーブル2 ID 参加番号 級 判定 証書番号 1   2   1  〇   1 2   4   1  ◎   2 3   7   1  4   1   2  ◎   1 7   3   2 5   6   2  〇   2 6   9   2  〇   3 8   5   3  ◎   1 9   8   3  〇   2 連番を振る場合Dcountを使えばよいみたいですが、級別だけを条件とした場合は連番が振れるのですが、「判定が〇・◎のもの」という条件の付け方がわかりません。 どなたかアドバイスをお願いします。

  • アクセスの使い方についてです。

    アクセスの使い方についてです。 クエリで以下の2個の様なテーブルデータを合わせたいと思っております。 テーブル1 日付      金額 2010/01/01 10000 2010/01/03 10000 2010/01/05 10000 2010/01/07 10000 : : デーブル2 日付      金額 2010/01/01 10000 2010/01/02 10000 2010/01/03 10000 2010/01/04 10000 : : これらを日付で結びつけると 日付      金額 2010/01/01 20000 2010/01/03 20000 2010/01/05 10000 2010/01/07 10000 : : と、2010/01/02等テーブル1にない日付のが飛ばされてしまいます・・・ クエリの仕組みで飛ばされているとは思うのですがなんとか 日付      金額 2010/01/01 20000 2010/01/02 10000 2010/01/03 20000 2010/01/04 10000 : : このような出力にできませんでしょうか?

  • ACCESS2000でグループごとに連番を振りたい

    ACCESSで登録フォームを作成し、 そこで、下記のようなテーブルを作ろうとしてます。 伝票番号 明細番号 商品   1   1   りんご   1   2   みかん   2   1   すいか   2   2   かき   1   3   なし   3   1   くり 伝票番号ごとに連番を振って行きたいのですが、 オートナンバー型にしてしまうと、伝票番号に 関係なく、連番を振ってしまいます。 この場合の解決方法を教えていただけないでしょうか。

  • ACCESSで連番を振りなおす

    access初心者です。 行番号というテキスト型のフィールドがあり、連番を入力してあるのですが、チェックの過程で一時的に同じ番号を入力する事があります。 それを最終的に、フォーム上のボタンを押して連番に戻したいのですが、どうすればいいかわかりません。 ご回答よろしくお願いします。 [行番号][商品名]   1    あ   2    い   3    う   4    え 上記のデータがチェックの過程で下記になります。 [行番号][商品名]   1    あ   2    い   2    いい   3    う   4    え 上記の状態を、ボタンを押すと下記になるようにしたいのです。 [行番号][商品名]   1    あ   2    い   3    いい   4    う   5    え

  • Accessレポート 複数条件での集計

    どなたかお知恵をお貸しください。 テーブル名:T_当社 フィールド:商品管理番号(テキスト)、入庫日(日付)、数量(数値)、金額(数値)、伝票番号(テキスト) テーブル名:T_取引先 フィールド:商品管理番号(テキスト)、入庫日(日付)、数量(数値)、金額(数値) クエリ名:Q_商品一致 元テーブル:[T_当社]、[T_取引先] フィールド:商品管理番号(テキスト)、入庫日(日付)、数量(数値)、金額(数値)、伝票番号(テキスト) 抽出条件:[当社]テーブルの[商品管理番号]と[取引先]テーブルの[商品管理番号]が一致するものだけ データベース構成は以上の通りです。下記のようなレポートを作成したいのです。 条件1:[入庫日]を月単位でグループ化し、[数量][金額]を集計する。----- レポート上の表示項目名[数量][金額] 条件2:[伝票番号]の値が[3U]で始まるものと、[3N]で始まるものは、 条件1の[数量]と[金額]から差し引いて、別列に表示させる。 ※3U、3Nのデータに関しては、[0]が表示されず、空白でもOK。 自分でしたのは、下記の通りです。 1.Q_商品一致クエリで、[伝票番号]が、3Uと3Nで始まるレコードを除外。 2.Q_商品一致クエリを元に、[伝票番号]が、3Uで始まるレコードだけを抽出するクエリ[Q_3U]を作成。 3.Q_商品一致クエリを元に、[伝票番号]が、3Nで始まるレコードだけを抽出するクエリ[Q_3N]を作成。 4.Q_商品一致クエリを元に、[入庫日]でグループ化したクエリ[Q_商品一致(月別)]を作成。  Q_3U、Q_3Nも同様に、[入庫日]でグループ化したくエリを作成。 (4)で作成した3つのクエリを、1つの選択クエリにしてみたのですが、これだと、例えば、 4月度にしか[3N]データがない場合でも、5月度以降の行にも、4月度の[3N]データの値が繰り返し表示されてしまいます。

  • ACCESSで日付ごとに自動連番(日付+連番)する方法

    ACCESSで日付ごとに自動連番(日付+連番)する方法 ACCESSとvba、共に初心者です。 ACCESS2003を使用しています。日付ごとに自動連番する方法が知りたくいろいろ調べていたところ過去ログ(http://okwave.jp/qa/q726921.html)のベストアンサーさんの回答にたどりつきました。 とりあえず勉強と思い紹介されている通りにテーブル作成からフォームのレコード移動時へのコード貼り付けまで一通り行ってみましたが、自動連番とならず同じ番号のままとなってしまいます。(日付はパソコンの日付更新時にちゃんと反映されています。) 自動連番されないのは何が原因なのでしょうか。どなたかご教授の程よろしくお願いします。 例)DATEが5月5日の場合のIDへの記載値  0505001  0505001←ここが001のまま0505002にしたい。  0506001←日付が変われば0506(5月6日)に変わる。 以上、よろしくお願いいたします。

専門家に質問してみよう