区分別の採番方法

このQ&Aのポイント
  • A/B/Cの区分別に番号を採る方法について教えてください。
  • 業務管理テーブルと区分マスタテーブルを使用して、区分ごとに番号を採る方法を教えてください。
  • 入力フォームから区分Aを入力した時に、業務管理テーブルのA受注番号に1を加える方法を知りたいです。
回答を見る
  • ベストアンサー

【Access】区分別の採番方法

A、B、C区分別の採番方法について なるべくシンプルな方法で出来る方法がありましたらお教えください。 何度かACCESSも作成していますが、初心者に近いので、簡単な方法だと ありがたいです。 今業務管理テーブルと区分マスタテーブルと二つのテーブルがあります。 業務管理テーブルには 【業務管理番号】【A受注番号】【B受注番号】【C受注番号】【区分】【機器名】 【001】【19000】【-】【-】【A】【SIMULATOR】 【002】【-】【-】【19000】【C】【GENERATOR】 【003】【-】【-】【19001】【C】【SIMULATOR】 【004】【19001】【-】【-】【A】【SIMULATOR】 【005】【-】【19000】【-】【B】【AMPLIFIER】 【006】【-】【19001】【-】【B】【AMPLIFIER】 区分テーブルには 【区分コード】【区分名称】 【A】【簡易点検】 【B】【精密点検】 【C】【修理】 業務管理番号は1業務ごと連番で番号を採っています。 A/B/C受注番号は各区分ごとに番号を採ります。 区分はA/B/Cのどれかです。 機器名は点検・修理の対象となる機器名が入ります。 上段の業務管理テーブルを元に入力フォームを作成し、そのフォームから区分Aを入力して登録した時に業務管理テーブルのA受注番号に1が足されるようにしたいです。区分は一つのみしか選択しません。 よろしくお願い致します。

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

  • ベストアンサー
回答No.2

【補足】プログラムレスで一斉に連番を打つ方法! Private Sub コマンド0_Click()   Dim isOK   As Boolean   Dim I    As Integer   Dim N    As Integer   Dim lngMAX  As Long   Dim strWhere As String      strWhere = " WHERE VAL(A管理番号 & '')=0 AND 区分=1"   N = DBLookup("SELECT COUNT(*) FROM テーブル2" & strWhere)   lngMAX = DBLookup("SELECT MAX(A管理番号) FROM テーブル2 WHERE 区分=1")   For I = 1 To N      isOK = CnnExecute("UPDATE テーブル2 SET A管理番号=" & lngMAX + I & strWhere & " AND ID=" & DBLookup("SELECT Top 1 ID FROM テーブル2" & strWhere))   Next I End Sub  この方法だと、上記 strWhere に Order by 節を追加すれば、希望する順番で一斉に番号を付与することができます。  Access の Update 文には、SQL Server のように Top句がサポートされていません。そこで、いわゆる複文モドキで Top句効果を得る訳です。これですと、SQL文を発行するだけで一斉に番号を付与することが出来ます。先だっての回答のように入力作業が一段落し、入力ミスも追放した段階で上述のコードを実施すえばいいのです。これで、万事解決かと思います。  なお、区分は、1;"A";2;"B";3;"C" とするのが一般的でしょう。そういう意味の1です。

tama8356
質問者

お礼

ありがとうございます。 少し希望が見えてきました。頑張ります!

その他の回答 (1)

回答No.1

Q、採番方法は? A、3拓。 1、プログラム方式。 2、最大値加算方式。 3、採番テーブル方式。 《プログラム方式》  採番ルールに従って番号未定のレコードセットを編輯可で呼び出して連番を振る。これ、一番のお勧め。 《最大値加算方式》  ネット上の質疑応答、あるいは「採番とは?」のテーマでの解説で採用されている手段 Private Sub 区分_AfterUpdate()   Me.A管理番号 = ""   If Val(Me.A管理番号 & "") = 0 And Me.区分 = 1 Then     '     ' 注意:見つからない時は、0+1 になる!     '     Me.A管理番号 = DBLookup("SELECT MAX(A管理番号) FROM テーブル2 WHERE 区分='A'", 0) + 1   End If End Sub 《採番テーブル方式》  《採番管理表》にアクセスし+1します。同時に、その加算後の値を採用します。最も、速い方式です。 Private Sub 区分_AfterUpdate()   Dim isOK AS boolean   Dim N As Long   Me.A管理番号 = ""   If Val(Me.A管理番号 & "") = 0 And Me.区分 = 1 Then     N = DBLookup("SELECT A管理番号 FROM 採番テーブル WHERE 番号名='A管理番号'", 0) + 1     isOK=CnnExecute("UPDATE 採番テーブル SET A管理番号=" & N + 1)     If Not isOK Then       StopMsg "[採番テーブル]が更新できないエラーが発生しました!"     End If   End If End Sub ※DBLookupは、Access がサポートしている適当な関数に変更してください。  方式2と3では、添付図のように番号が順不同、非連番で付与されることもあります。そこんところが難点です。 ※※※※※※※※※※※※※※※※※※※※※※※  質問者が欲しているコードってのは・・・ ※※※※※※※※※※※※※※※※※※※※※※※  次のようかな。ちょっと、質問文は曖昧で不正確だと思いますよ。 Private Sub 区分_AfterUpdate()   Dim strSQL As String   Select Case 区分     Case 1       Me.B管理番号 = ""       Me.C管理番号 = ""       strSQL = "SELECT MAX([A管理番号]) FROM テーブル2 WHERE 区分=1"       Me.A管理番号 = DBLookup(strSQL, 0) + 1     Case 2       Me.A管理番号 = ""       Me.C管理番号 = ""       strSQL = "SELECT MAX([B管理番号]) FROM テーブル2 WHERE 区分=2"       Me.B管理番号 = DBLookup(strSQL, 0) + 1     Case 3       Me.A管理番号 = ""       Me.B管理番号 = ""       strSQL = "SELECT MAX([C管理番号]) FROM テーブル2 WHERE 区分=3"       Me.C管理番号 = DBLookup(strSQL, 0) + 1     Case Else   End Select End Sub  一応、添付図のように正常に動作することは確認したが、回答は、その記憶に基づいて書いています。その際に小さいバグが紛れ込んでいるかも知れません。私が回答を書くに当たって動作を確認したように、簡単なテストテーブルを用意してコードの働きを確認されることを強く勧めておきます。

tama8356
質問者

お礼

回答ありがとうございます。 レコードセットがいまいちわからないので勉強して出直します。

関連するQ&A

  • Accessで違う条件で異なる処理

    Access作成中に行き詰りましたのでどうか助けてください。 業務管理テーブルという名のテーブルに A管理番号 受注順に番号をとっていきたいです B管理番号 受注順に番号をとっていきたいです C管理番号 受注順に番号をとっていきたいです A点検 チェックボックス B点検 チェックボックス C点検 チェックボックス という項目があります。 業務管理テーブルを元にフォームを作成し、そのフォーム画面でAにチェックを入れて画面を閉じると、A管理番号に1が足されるようにしたいです。1が足されるというのは、例えばA管理番号の数字が最初201900でAにチェックを入れ終了したら数字が201901になるようにしたいです。この時BとCの数字は何も変わりません。 よろしくお願い致します。

  • 【Access】区分別の採番方法の続き

    前回から質問させてもらっている採番の件です。 テーブルの情報は添付の通りなのですが、 今までの仮テーブルとは状況が少し違うのです、 たとえばA2LA校正という業務案件が1件ありましたら、 FR番号台帳のA2LA_FR_Numberと 校正情報番号台帳のA2LA校正番号の二つの番号を採番したいです。 FRNumberとは案件管理の番号です。 右の校正番号とは各校正業務に割振られる固有の番号で、 A2LA/Standard共に別々で番号を取りたいです。全ての採番の番号は受け付け順に 採番したいです。 すみませんが、よろしくお願いいたします。

  • アクセスフォームで別テーブルの呼びだし。。。

    よろしくお願いします。 アクセスで区分と連番というテーブルがあります。 フォーム連番を使い入力していますがフォームから手入力するのが大変なので区分というテーブルをつくり、入力するときに区分テーブルから参照できるようにしたいのです、リレーションショップはしてみましたが考えているような参照はできませんでした。 フォーム連番は下記4項目入力しています。 管理区分: 連番: 機器番号: 機器名称: テーブル区分は下記の2項目です 管理区分: 機器名称: このときフォームの機器名称のところで区分の機器名称を参照してほしいのですが。 教えてください、お願いします。

  • Accessで自動採番の方法がわかりません。

    今月より弊社工場で、私が生産管理システムの構築を担当することになりました。 Accessでの構築です。また、Accessは初心者です。 質問は、受注登録時に受注登録フォーム(F_受注登録)で管理番号を自動採番したいのですが、やり方がわかりません。また、管理番号の自動採番実現のためにテーブルの手直し等ありましたらご教授願います。 管理番号の構成 MSSF-10001-1 MSSF→自社番号です。T_自社にMSSFとMSSTを登録しています。 10001→顧客番号と部署番号を結合しています。上3ケタが顧客番号、下2ケタが部署番号です。また、部署番号は顧客の部署になります。 1→枝番号です。1から順にカウントしていきます。例)MSSF-10001-1、MSSF-10001-2、MSSF-10002-1、MSSF-20001-1、MSST-30001-1 質問部分のフローと現在の進捗状況を記載します。 フロー F_受注登録を開く→受注内容を入力→受注内容登録時、管理番号を自動採番し、登録を完了する 現在作成済のテーブル、フォーム T_顧客、T_自社、T_ 受注一覧、T_部署、F_顧客登録、F_受注登録、F_受注一覧 T_顧客→顧客番号、顧客名 T_自社→自社番号、自社名 T_受注一覧→管理番号、顧客名、部署名、担当者、状態、工番、No、品番(図番)、品名、数量、納期、確定納期、出荷日、送り状番号、加工先、材料、材質、備考 T_部署→部署番号、部署名 F_顧客登録→T_顧客へ登録ができます。 F_受注登録→T_受注一覧へ登録ができます。 F_受注一覧→T_受注一覧の閲覧ができます。 ご不明な点等ありましたら、ご連絡ください。 よろしくお願いします。

  • ACCESS 各区分の最後の番号を表示させる方法

    アクセスは独学です。質問の仕方、用語がおかしかったらすみません。 バージョン2000 受注管理システムを作っています。 取引先マスターTの取引先コードをこのテーブル内で、ABCで区分分けしています。 希望は、テキストボックスが3つあり、それぞれに最後番号の 例)A105、B150、C008 と表示させたいのです。 ※VBAも独学なので、あまり複雑なのはできません。 取引先マスターTの中身      A001、A002、A003・・・・問屋関係      B001、B002・・・・協力業者関係      C001、C002・・・・その他取引先関係 システム利用者が、自身で最後の番号を探すのが面倒と苦情が・・・。 そこで、以下のような式を作成しました。 =DMax("取引先コード","取引先マスターT","Left([取引先コード],A") エラーです。 単純に =DMax("取引先コード","取引先マスターT") だと、C008が表示されます。 ご教示お願い致します。

  • 区分経理とは

    お世話になります。 区分経理について教えてください。 例えばA社、B社、C社から受注を受けた場合、 それぞれの案件ごとにかかった経費をきちんと分けて仕訳していることを言うのでしょうか。 だとしたら、A、B、C社に共通で使うものをまとめて購入した場合はどうなるのでしょうか。 的はずれなことを聞いているかもしれませんがよろしくお願いします。

  • エクセルで自動採番する方法

    「管理対象区分(カラムA)」、「起票日(カラムB)」を使って、「ID(カラムC)」に自動採番したいのですが、効果的な関数をご教示いただけないでしょうか。 ID採番のロジックは以下の通りです。 (1)(「管理対象区分」の頭文字3桁) + (2)(「起票日」のYYYYMM) + (3)(「起票日」が同月内であれば同月の通し番号、翌月であれば「001」から振り直し) <特記事項> A. (2)について、MMが一桁の場合でも、2桁表示したい(例:1月⇒01) B. (3)について、常に3桁で表示したい ご回答いただけると幸いです。 よろしくお願いいたします。

  • ACCESS2000 更新クエリで文字を追加・変更したい

    ACCESS2000のマクロでCSVファイルをインポートし、Excelに出力しています。 そこで途中に更新クエリを使い、文字の追加・変更を行いたいのですが何故かうまくいきません。。。 【テーブルA】 フィールド/受注番号(910004292) 【テーブルB】 フィールド/出荷番号(910005232)/製造番号(910005451) 【テーブルC】 フィールド/受注番号(910005232)/製造番号(910005451)/納期(1021) 受注、出荷、製造の各フィールドは先頭に"0"を追加したいです。 910004292→0910004292 納期は2009/10/21となるように、現在の西暦(できれば自動)/と3桁目にスラッシュを入れて、yyyy/mm/dd形式にしたいです。 更新クエリで フィールド:受注番号 テーブル:テーブルA レコードの更新:"0"&[受注番号] と入力してやるとうまくいきました。 同じように横のフィールドに フィールド:受注番号 受注番号 ・・・ テーブル:テーブルA テーブルB ・・・ レコードの更新:"0"&[受注番号] "0"&[受注番号] ・・・ と各テーブルの全てのフィールドを入力して更新すると、 レコードに物凄い数の"0"が追加されてしまいます。 例:0000000000000000910004292 何度も繰り返しているようなのですが、なぜなんでしょうか? 更新クエリを別々に作ればそれぞれうまくいきました。 ひとつのクエリに複数のテーブルのフィールドを入れると駄目です。 また、納期について1021→2009/10/21にうまく変更する方法はありますでしょうか? 分かりにくくて申し訳ありませんが宜しくお願いいたします。

  • EXCELピボットテーブルでの区分を可変させたい

    A列 B列 4 7 2 5 4  0 8 -8 5 3 1 2 8  4 2 -3 6  0 上記のようなデータでA列を1~3、4~6のようにグループ分けして、ピボットテーブルで下記のような和や平均を求めたりします。 1~3  5+2+(-3)=4 4~6  7+0+3+0=7 7~10  (-8)+4=-4 そしてグループ分けをいろいろ変えたいのです。 1~5  7+5+0+3+2+(-3)=14 6~10  (-8)+4+0=-4 区分を変える手軽な方法はないですか? 

  • Accessでメールの文章を作るときの方法

    Access2003で、インターネットショップの受注管理を作っています。 注文があった時、お客様に注文内容や送り先の入ったメールを送りたいのですが、本文の作成方法で行き詰ってしまいました。 テーブルは注文者マスタと受注明細マスタがあって、それぞれの注文番号フィールドが1対多のリレーションシップでつながっています。 vbaを使い、ADOでテーブルの内容を読みながらつないでいく方法をとったのですが、コードが300行以上になってしまって、とても見づらく効率が悪いと思います… バグのない長いコードを書くのがとても苦手なので、コードは短く、後で簡単に調整できるような方法を探しています。 このような場合、どんな方法をとるべきでしょうか? まだよくわからないのですがよろしくお願いします。

専門家に質問してみよう