• 締切済み

ACCESS条件により自動に連番付与させるには

処理月   |処理日 |値 |番号付与 2010/12/01|2010/12/01|Is Not Null|1 2010/12/01|2010/12/01|Is Not Null|1 2010/12/01|2010/12/02|Is Not Null|2 2010/12/01|2010/12/02|Null | 2010/12/01|2010/12/02|Is Not Null|2 2010/12/01|2010/12/01|Is Not Null|1 2010/12/01|2010/12/05|Is Not Null|3 2010/12/01|2010/12/05|Is Not Null|3 2010/12/01|2010/12/05|Null | 2010/12/01|2010/12/10|Is Not Null|4 2010/12/01|2010/12/10|Null |4 2010/12/01|2010/12/10|Is Not Null|4 2011/01/01|2010/01/05|Is Not Null|1 2011/01/01|2010/01/05|Null | 2011/01/01|2010/01/05|Is Not Null|1 2011/01/01|2010/01/05|Is Not Null|1 処理月に対してスタート 処理日にたいして値があれば番号を自動付与 *処理月の値が変更されれば番号は1から自動付与 分かる方願います

みんなの回答

  • layy
  • ベストアンサー率23% (292/1222)
回答No.5

入力時に採番するのでは? 既存の数レコードに該当キーがあるかないか見る あればその番号と同じ なければ1加算した番号 1行目はレコードなく新規採番の1 2行目は1行目分があるための1 3行目はレコードなく新規採番2回め、1加算の2 の考え これを年度単位に行う 採番の原理が参考になるのでは? まとめてやるにはVBA使う等、前述のコントロールブレイクとかが参考

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.4

提示されたテーブルを「T処理」という名前にします。 提示されたテーブルにデータを固有に識別する フィールドがなければオートナンバーのフィールド を追加し、その名前をIDとしてください。主キーの 設定は特に必要ありません。 以下の手順で設定してください。 Q20、Q30、Q40 はクエリ名です。そのままで 登録してください。変更する場合はSQL文の中の すべてを変更する必要があります。また「T処理」 というテーブル名も必要に応じて変更してください。 この場合もクエリの中も変更する必要があります。 (1) Q20 SELECT T処理.処理月, T処理.処理日 FROM T処理 WHERE ((Not (T処理.値) Is Null)) GROUP BY T処理.処理月, T処理.処理日; (2) Q30 SELECT Q20.処理月, Q20.処理日, (SELECT COUNT(*) FROM Q20 AS Temp WHERE Q20.処理月 = Temp.処理月 AND Temp.処理日<=Q20.処理日 GROUP BY Temp.処理月) AS 連番 FROM Q20; (3) Q40 SELECT T処理.ID, T処理.処理月, T処理.処理日, T処理.値, Q30.連番 FROM T処理 INNER JOIN Q30 ON (T処理.処理月 = Q30.処理月) AND (T処理.処理日 = Q30.処理日) WHERE ((Not (T処理.値) Is Null)); (4) 標準モジュールに以下を貼り付け保存してください。 フォームに貼り付けるときは Sub を Private Sub にしてください。 DAOを使用しますのでコード表のツールから参照設定で DAOにチェックを入れてください。入っていればいいです。 Microsoft DAO xxx Object Library xxxは3.6のような数字です。 Sub cmd処理() Dim db As Database Dim rs1 As Recordset Dim rs2 As Recordset Set db = CurrentDb Set rs1 = db.OpenRecordset("T処理", dbOpenDynaset) Set rs2 = db.OpenRecordset("Q40", dbOpenDynaset) If rs1.RecordCount > 0 Then rs1.MoveFirst Do Until rs1.EOF If rs2.RecordCount > 0 Then rs2.MoveFirst Do Until rs2.EOF If rs1!ID = rs2!ID Then rs1.Edit rs1!番号付与 = rs2!連番 rs1.Update End If rs2.MoveNext Loop End If rs1.MoveNext Loop End If rs1.Close: Set rs1 = Nothing rs2.Close: Set rs2 = Nothing db.Close: Set db = Nothing End Sub (5) ボタンのクリックイベントで、 Call cmd処理 としてください。 クエリのSQL文は長いので貼り付けるときに 気をつけてください。 >*尚、yyyy/mm/bb(日付け)まで表示させていますから >月にたいしては1日で(2010/01/01)や(2010/02/01)で >統一するつもりです 余分な処理の発生がなくなるので考えることが 省略されます。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

(1) >値の入力時の処理にさせたい とありますが、レコードはランダムに入力 されていくのですか。 (2) 連番付与はテーブルに書き込むのですか、 あるいはクエリで表示でいいのですか。 (3) >処理月に対してスタート と、ありますが、年度が変わっても月が同じ 場合は同じ月として計算するのですか、あるいは 年度が変われば同じ月でも違うグループとして 計算するのですか。 (4) (1)かつ(2)のテーブル書き込みの場合は >値の入力時の処理にさせたい だと、その都度全てのレコードの書き換えが 起こります。レコード数が多ければ時間が かかるようになりますが。 (出来ないことはありませんが) (5) 各レコードを一意に識別できる番号などは ありますか。 以上のことをお聞かせいただければ、と思います。 なお、レコードの入力順序はどのようになっていても 構いません。

BSR123
質問者

お礼

お返事有難うございます >(1) >値の入力時の処理にさせたい >とありますが、レコードはランダムに入力> >されていくのですか。 はい、追加入力が発生するのを想定しております >(2) >連番付与はテーブルに書き込むのですか、 >あるいはクエリで表示でいいのですか。 テーブルに書き込みしたいです >(3) >処理月に対してスタート >と、ありますが、年度が変わっても月が同じ >場合は同じ月として計算するのですか、あるいは >年度が変われば同じ月でも違うグループとして >計算するのですか。 年度がかわれば違う日付けとしての認識で考えております *尚、yyyy/mm/bb(日付け)まで表示させていますから 月にたいしては1日で(2010/01/01)や(2010/02/01)で統一するつもりです >(4) >(1)かつ(2)のテーブル書き込みの場合は >値の入力時の処理にさせたい >だと、その都度全てのレコードの書き換えが >起こります。レコード数が多ければ時間が >かかるようになりますが。 >(出来ないことはありませんが) そうですか;; それだとたとえば、計算ボタンを作成し押せば実行するような形 が理想となります >(5) >各レコードを一意に識別できる番号などは >ありますか。 IDのことでしょうか? いまのとろ管理番号は作ってないです

  • layy
  • ベストアンサー率23% (292/1222)
回答No.2

「ACCESS」、「連番」、 で検索。 これだけでいろいろサンプルあります。 グループ単位につけたり、連番にしたり 適合するものを探してみると良いです。 一例 http://www.accessclub.jp/qa/qa_021.htm http://www.accessclub.jp/samplefile/samplefile_72.htm VBAを使うなら、 先頭から単純に1レコードずつ処理していき、 キーが変わったら カウントを+1し、その値を出力する。 同じキーなら、 前レコードに付与したカウントをそのままの値セットする。 EOFになるまでこれの繰り返し。 ただ、 6行目については、過去に出現したキーと同じなので カウンタ+1させる前に、その判定が事前に必要です。 前に出現したキーであれば、+1しないでその保持したカウンタをそのまま適用、 前に出現したキーでない、前のレコードと違うならカウンタ+1。 サンプル等で、 >処理日にたいして値があれば番号を自動付与 付与していく番号を保持するにはどうするか・・・・の実現方法を考えてみる >処理月の値が変更されれば番号は1から自動付与 前の処理月を保持するにはどうするか・・・・の実現方法を考えてみる

  • layy
  • ベストアンサー率23% (292/1222)
回答No.1

まず、コントロールブレイクの考え方を組み込むと良いです。 6行目が他と並びが違うので、最初の並びを保持する項目は準備する必要あります。

BSR123
質問者

お礼

>まず、コントロールブレイクの考え方を組み込むと良いです。 具体的にどうすればよいのか^^; >6行目が他と並びが違うので、最初の並びを保持する項目は準備する必要あります ・値の入力時の処理にさせたい

関連するQ&A

  • 年月-連番を付与するマクロを教えて下さい。

    連番を付与するマクロを教えて下さい。 初心者です。 B列に値が入ったタイミングでA列に今日の年月-01の連番を付けたいと思います。 年は西暦の下2桁月2桁-数字2桁 1401-01 できれば月が変わったら連番も01スタートなら最高です。 1401-01 1401-02 1402-01 こんな感じです。 B列には下に値が無ければ順番に下の行に値が入るマクロが入っています。 初心者ゆえ説明もわかりにくいかと思いますが、よろしくお願いします。

  • 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)) ご教授いただけると幸いです。よろしくお願いいたします。

  • Access条件付き書式について

    Access2003のフォームにおいて、他のフィールドの値がNullの時に背景色を変更する方法があったら教えてください。

  • 段落番号の自動付与ソフト

    特許明細書を書いている者です。 明細書中に記載する段落番号【0001】・・・を自動的に付与してくれるフリーソフトってありますか? 多機能な支援ソフトはいろいろあると思うのですが、単に段落番号の付与だけでいいので、フリーのソフトが欲しいんです。 ご存じの方、情報をお願いします。

  • 時間を自動計算してディフォルトに設定

    以下のようなテーブルを作りたいと思うのですが、 CREATE TABLE hogeTBL ( id bigint(20) NOT NULL AUTO_INCREMENT, product_code varchar(20) NOT NULL default, start_time datetime NOT NULL default '0000-00-00 00:00:00', end_time datetime NOT NULL default '0000-00-00 00:00:00', sub_time datetime NOT NULL default(ここにend_time-start_timeの値を設定したい), PRIMARY KEY (id) ) TYPE=MyISAM; 見たとおり、インサート時、sub_timeのところに自動で end_time - start_time の、差分値が挿入されるようにしたいのですが、構文が思いつきません。 そもそもこういったことはCreate Tableで可能なのでしょうか・・・? サーババージョンは4.1.22です。 宜しくお願いします。

    • ベストアンサー
    • MySQL
  • 有給休暇付与の件

    有給休暇についてご教授願います。 対象者は全社員となっており、これからの入社の方だけでは なく既存社員も含めた規定変更となっております。 【内容】 毎年4/1に付与される有給休暇が入社月に併せて 年2回の付与に変更されます。 〈変更内容は〉 毎年4/1 有給付与     ↓ (1)4/1~9/30  10/1に付与 (2)10/1~3/31 4/1に付与 に変更となります。 私の入社からの状況は H19年5月1日に入社⇒同年11月に10日付与         ↓ H20年4月1日 ⇒ 11日付与         ↓ H21年4月1日 ⇒ 付与日が上記(1)に変更となり、4月には付与されず ※本来の付与日が変更された事により前回の支給より1年半待たなければ なりません。こういう変更は労働法的には良いのでしょうか。 尚、各方面の書物を読んでも難しく記載されている為、判断が付きにくいです。 お手数でもあまり専門用語を使わずにご教授頂ければと思います。

  • スキャンしたPDFに頁番号を連番で自動付与する

    数枚の文書を、スキャナでスキャンしてPDFにした場合(私の場合「スキャンスナップ」のスキャナを使ってスキャン、その附属フソトの「アドビ アクロバット XI スタンダード」でPDF化)、そのPDFの各ページの右下とか右上とかに、ページ番号を「連番」で自動的に付与したいのですが、その方法をお教え下さい。

  • SQL文を教えてください

    1-a,1-b,2-a,2-b,3-a,3-b,4-a,4-b,5-a,5-bというカラムがあるとき。 以下の条件を満たす行を抽出するのに、 検索速度の早いSQLの書き方はありますか? (条件)N-aに値有りのとき、N-bは値有り  ただし、1-aから5-a全て値なしのときは対象外 ※こんな書き方は思いつくのですが、遅そうで・・・ ( (1-a is not null AND 1-b is not null) or (2-a is not null AND 2-b is not null) or (3-a is not null AND 3-b is not null) or (4-a is not null AND 4-b is not null) or (5-a is not null AND 5-b is not null) ) and not(1-a is null AND 2-a is null AND 3-a is null AND 4-a is null AND 5-a is null)

  • 年休の付与について

    私の職場では、毎年1月1日に年休を一斉付与しています。 普通なら6ヶ月勤務したら10日付与されて、その後さらに1年経過したら11日付与されて・・・という付与の仕方だと思うのですが、それだと年休付与の時期がその人その人でバラバラになってしまうため、基準日(1月1日)をもうけたのです。 たとえば4月に新規採用された人だと6ヵ月後の10月にまず10日付与されて、その2ヵ月後の1月1日には、その後1年勤務したものとみなして11日付与されます。そうすると、6月に採用した人だと基準日まで一月しかないのに12月に10日、1月1日にさらに11日、ということになってしまいます。それがどうしても腑に落ちません。 一斉付与の1月までの残り期間に応じて6ヵ月後(最初)に付与する日数を変えることは労働基準法に違反しますか?たとえば、6月に採用した人なら、12月に2日付与して次の月(1月)に11日付与する、という感じです。 上手く説明ができていないかもしれませんが、皆さんの意見をお聞かせください。よろしくお願いします。

  • 年次有給休暇付与日変更時は有休を2回付与必要?

    会社の決算日を変更することに伴い 年次有給休暇の付与日も併せて変更しようと思っています。 その際、年次有給休暇は当初の付与日と新付与日の2回付与することが必要なのでしょうか? 具体的には 1.当初年次有給休暇付与日 9月1日、 年次有給休暇⇒20日付与 2.新付与日 10月1日にした場合   9月1日に20日付与し、10月1日に20日付与する必要合あり?   そうなると、2カ月で40日付与になっていしまいます。  もし、他に対処方法があれば教えてください。  例)9月1カ月分は、不利益措置で2日付与するとか。          以上

専門家に質問してみよう