• ベストアンサー

Accessで商品分類毎に自動採番を行う方法

access初心者です。過去ログも内容に合致するものがなかなか見つからなかったので、質問させていただきます。 現在商品テーブルを作成しています。 例えば下記のように商品カテゴリが分類されていて、小分類毎に商品を0001から自動で採番する方法をご教示いただけないでしょうか? 大分類  中分類    小分類     商品名   01家電  01映像家電 01テレビ     LCD-32 0001 LCD40 0002 | できればフォーム機能を使用してコンボボックスで大分類、中分類、小分類と選択していき、最後に商品を登録した結果としてLCD-32の商品コードは0101010001となるようにしたいのです。 どうぞ宜しくお願いします。

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

  • ベストアンサー
  • tazukadan
  • ベストアンサー率68% (15/22)
回答No.2

具体的に書く気力がありませんのでヒントだけ。 連番の元になる項目、仮に「枝番」とします。これが必要です。 SQLのMax関数を使って、大分類、中分類、小分類が同じで一番大きい枝番(自動で振られる4ケタの数字です)を求めるといった処理になると思います。 大分類  中分類    小分類  枝番   商品名   01家電  01映像家電 01テレビ  0001   LCD-32 0001 求められた「同じ分類を持つ最大の枝番」に+1してから、商品コードの生成を行います。 また、いままで登録されていない分類ですと最大値の取得でNullが返ってくると思いますから、Nullなら1という処理も必要です。 SQLの知識とADOなりDAOなりの知識が必要になりますが、習得しておいて損はありません。後々必ず使います。

その他の回答 (1)

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

長らく使ってなかったので、久しぶりに復習してみました。 コンボボックスの代わりにラベルを3個置いた、簡単なモデルでテストしてみました。 下記の様なテーブルで、 id 0101010001 0101010002 0101010003 0101020005 Private Sub コマンド4_Click() Dim category As String Dim criteria As String Dim nowMax As String category = ラベル5.Caption & ラベル6.Caption & ラベル7.Caption criteria = "Left([id],6) = '" & category & "'" nowMax = Nz(DMax("id", "テーブル1", criteria)) If nowMax = "" Then MsgBox category & "0001" Else MsgBox category & Format(Val(Right(nowMax, 4)) + 1, "0000") End If End Sub 3個のラベルに、それぞれ01を指定して、本コードを記述したボタンをクリックすると、010101004が次のコードとして表示されます。 といった事でよろしいでしょうか? コンボボックスでの3段階絞り込みの部分などは、検索すると多数ヒットしますので、そちらをご参照下さい。

zep1173
質問者

補足

早速のご教示ありがとうございます。 小分類が02に変わった場合、0001からナンバーを振りたいと思っています。 つまり小分類毎にオートナンバーで0001から番号が振れないものかと模索しています。 説明不足ですみません。 宜しくお願いします。

関連するQ&A

  • Access2003とAccess2007の違い

    Access独習者です。 入門書で「物品貸出状況フォーム」を作成しました。 フォーム画面「物品貸出状況一覧表」の下に作ったコンボボックス289「大分類」とコンボボックス291「小分類」で 貸出状況を調べる物品を絞り込み一覧表に取り込みます。 コンボボックス「大分類」「小分類」の値集合ソースはそれぞれ「T_大分類」と「T_小分類」です。 Access2003では下記のコードとコンボボックス291「小分類」の値集合ソースのクエリビルダに組み込んだ 抽出条件「大分類番号[コンボ289]」で絞り込んだ物品が一覧表に表示されたのですが、Access2007では コンボボックス289「大分類」を変更後コンボボックス291「小分類」が更新されません。 Access2003とAccess2007でなにか違いがあるのでしょうか。 お聞きするのに提示すべきコードなどそろっていないかもしれないのですが、ご助言いただければ助かります。 よろしくお願いいたします。 Private Sub コンボ289_AfterUpdate() Me!コンボ291.Requery End Sub Private Sub コンボ291_AfterUpdate() Me.Filter = "小分類番号=" & コンボ291 Me.FilterOn = True End Sub

  • アクセスのYES NO型の処理について

    アクセス2010を使用している独学の初心者です。 フォームで大分類、中分類、小分類のカテゴリーにそれぞれチェックボックスを作っており、その商品のいる、いらないを選択したらその商品一覧テーブルにあるYES NO型のチェックボックスをオンオフしたいのですがうまくいきません。 今、同じフォーム内にある大分類とそれぞれ紐づいている中分類と小分類のチェックボックスをオンオフできるように private sub chk_大分類.value=false then me.chk_中分類.value=false me.chk_小分類.value=false ここまで書いているのですが、商品一覧の[大分類]にカテゴリーされている商品の不要商品フラグのチェックボックスをオンオフする書き方がわかりません。 すごくざっくりとした説明になってしまいましたが、どなたかご教示いただけませんでしょうか。 よろしくお願いいたします。

  • アクセスで大分類・中分類・小分類を作っています。

    アクセスで大分類・中分類・小分類を作っています。 コンボボックスを連動させて,作成したのですが? データー入力後,例えば中分類を変更しても,大分類や小分類がそのままで登録されてしまうのです。 それではダメですよね・・・ その部分がデータとしてあっていればいいのですが,違うければ弾いて欲しいやり方を ご教示していただきたいのです。。。 ちなみに! 大分類に SELECT DISTINCT 配置署所 FROM ボンベ管理クエリ; 中分類に SELECT DISTINCT 署所記号番号 FROM ボンベ管理クエリ WHERE 配置署所=[大分類]; 小分類に SELECT [ボンベID], [容器記号番号] FROM ボンベ管理クエリ WHERE 配置署所=[大分類] AND 署所記号番号=[中分類]; 中分類と小分類には,イベントとして Private Sub 小分類_Enter() Me.小分類.Requery End Sub を書き込んでいます。   ※ この質問をする場合のカテゴリ選択のようにしたいのです・・・・ ぜひどうかよろしくお願いします。

  • アクセスで大分類・中分類・小分類を作っています。

    年度末のお忙しいところご回答ありがとうございます。  今度は 帳票でアクセスで大分類・中分類・小分類を作っています。  コンボボックスを連動させて,作成したのですが?  データー入力後,例えば中分類を変更しても,大分類や小分類がそのままで登録されてしまうのです。 それではダメですよね・・・ その部分がデータとしてあっていればいいのですが,違うければ弾いて欲しいやり方を ご教示していただきたいのです。。。 ちなみに! 大分類に SELECT DISTINCT 配置署所 FROM ボンベ管理クエリ; 中分類に SELECT DISTINCT 署所記号番号 FROM ボンベ管理クエリ WHERE 配置署所=[大分類]; 小分類に SELECT [ボンベID], [容器記号番号] FROM ボンベ管理クエリ WHERE 配置署所=[大分類] AND 署所記号番号=[中分類]; 中分類と小分類には,イベントとして Private Sub 小分類_Enter() Me.小分類.Requery End Sub を書き込んでいます。   ※ この質問をする場合のカテゴリ選択のようにしたいのです・・・・ ぜひどうかよろしくお願いします

  • ACCESSで

    まず始めに。 私はAccess初心者なので、何をどう質問して良いかもはっきりは分かりません。何か、足りない部分があれば書いて下さい。 喫茶店の売り上げ集計(メニュー別&顧客別)等のシステムをAccess2002で作っています。 と言っても、まだ始めのほうで詰まってしまっての質問です。 商品テーブル、商品の中分類テーブル、大分類テーブル、売上伝票テーブル、明細テーブルと在り、商品登録クエリ&フォーム、売り上げ登録クエリ&フォーム、明細登録クエリ&フォームがあります。 売り上げ登録フォームは、売り上げ伝票としています。 明細登録フォームは売り上げ登録フォーム(メイン)のサブフォームとしてあります。 メインフォーム上に入力日、販売日、顧客名(IDからクエリで引いてきます。)等をテキストボックスやコンボボックスなどで入力します。 伝票IDはオートナンバー型で指定し、それをサブフォーム上のIDに代入して登録しています。 大分類で飲み物と食べ物を分け、中分類で、『ホット系・アイス系・生ジュース系・カレー系・・・・軽食系・ケーキ系』等と分かれており、カレー系から軽食系までは、大盛小盛が指定出来るのですが、これを明細フォームでチェックボックスで入力しています。 問題はここからで、帳票形式の明細フォームで入力しているのですが、大盛、小盛が指定出来ない物の行のチェックボックスの『visible』を「false」にし、大盛、小盛が指定出来る物の行のチェックボックスの『visible』は「true」にしたいと想い、VBAで組みました。が、レコードセットを使わないとメインフォーム中の全ての行のチェックボックスの『visible』が同時に変わってしまいます。 windowsXPのコントロールパネルのODBCの設定もおかしいかもしれませんがどうしても分かりません。 基本的な事なのかもしれませんが、よろしくお願いします。

  • access 請求番号の自動採番

    まったくわかりません! よろしくお願いします。 仕様環境 WinXP  access2002 顧客管理のシステムを作っています。 テーブル 顧客テーブル(主キーは顧客番号 テキスト型) 請求テーブル(主キーは請求番号 テキスト型) 明細テーブル(主キーは明細番号でオートナンバー ダミーみたいな感じで使っています。) そしてリレーションシップで顧客テーブル(1)→(多)請求テーブル(1)→(多)明細テーブルになっています。 顧客情報を入力するフォームを作りました。 主キーは顧客番号(テキスト型,入力モードON,インデックス いいえ)で 他のテキストボックス(例えば名前)に何かしら文字を入力すると自動で顧客番号を採番してくれます。 例:0001 0002 0003~ そしてそのフォームから請求書作成フォームに飛ぶように 「請求書作成ボタン」を作り、顧客情報も一緒にひっぱっていってくれる 請求書作成フォームを作りました。(入力したばかりの情報も最新の情報で更新してくれます。) ・・請求書作成フォームはサブフォームを使い3つのテーブルからなっています。・・ 親フォーム:顧客テーブルから。 子フォーム:請求テーブルから。 孫フォーム:明細テーブルから。 主キーは請求番号で(テキスト型,入力モードON,インデックス はい(重複なし)) 他のテキストボックス(例えば請求日)に何かしら入力すると自動で請求番号を採番してくれます。 例:A0001 そこで問題なのですが、顧客情報は入力する度、次々自動で採番してくれるんですが、 請求番号は一番最初のレコードの”A0001”だけ採番してくれて、 新しいレコードで請求書を作ろうとテキストボックスに文字を入力すると「型が一致しません」というエラーが出ます。 ○ エラー内容 アクションエラーの実行 条件 true アクション名 値の代入 引数 [請求番号],Format(DMax("請求番号","請求マスタ")+1,"A0001") マクロは・・(参考書を参考にしています、マクロ名:自動採番マクロ) ------------------------------------------------- 条件 : DCount("請求番号","請求テーブル")=0 アクション : 値の代入 アイテム  : [請求番号] 式     :"A0001" ------------------------------------------------- 条件    : ... アクション : マクロの中止 ------------------------------------------------- アクション : 値の代入 アイテム  : [請求番号] 式     : Format(DMax("請求番号","請求テーブル")+1,"A0001") ------------------------------------------------- となっています。 念のため、主キーの入力モードを切り替えたり、式の"A0001"を単純に"1"にしたりしましたが、 請求番号はエラーが発生します。 原因がまったくわかりません。 よろしくお願いします!

  • access2007 フォームの設定

    access初心者です。 access2007を使用しています。 テーブル:商品テーブル --- フィールド:商品コード,商品分類,商品名 syo0001,文房具,のり syo0002,文房具,はさみ syo0003,筆記用具,蛍光ペン syo0004,筆記用具,油性ペン syo0005,筆記用具,水性ペン syo0006,ノート,A4ノート syo0007,ノート,B5ノート syo0008,ノート,メモ帳 商品テーブルが上記のようにあったとします。 フォームで商品分類と商品名のコンボボックスを作り、 商品分類のコンボボックスで「文房具」を選択した後、 商品名のコンボボックスを開いたときに「のり」「はさみ」だけが 表示できるようにしたいです。 (同様に筆記用具を選ぶと、「蛍光ペン」「油性ペン」「水性ペン」が表示される。) このようなこと可能でしょうか。 ご回答をどうか、よろしくお願い致します。

  • access2007でのサブフォームへの入力

    仕入入力画面なんですが メインフォーム(仕入伝票テーブル)サブフォーム(仕入伝票明細テーブル) という構成です。 メインフォームで 仕入先をコンボボックスで指定すると サブフォームの 商品を入力するコンボボックスに メインフォームで選択した仕入先で購入できる商品が選べるように したいのですが、どうすればよろしいでしょうか? メインフォームの仕入先コンボボックスを選択する度に サブフォームの商品コンボボックスで選択できる内容を反映させたい です。 仕入先A : 商品1 商品2 仕入先B : 商品3 商品4 商品5 仕入先C : 商品6 商品7 商品8 商品9 メインフォームで仕入先コンボボックスで仕入先Aを選択すると サブフォームで選択できる商品コンボボックスは商品1と商品2 メインフォームで仕入先コンボボックスで仕入先Bを選択すると サブフォームで選択できる商品コンボボックスは商品3と商品4と商品5 というようなイメージで作りたいです。 どうかよろしくお願いします。

  • Access97:サブフォームを切り替え表示したい

    アクセスで仕事で用いられる専門用語の和英辞書データベースを作っております。 その辞書は用語の持つ意味や使われ方などから分類をしています。 分類一覧テーブルは分類ID,分類からなり、用語一覧テーブルは用語IDと用語からなります。 これらをつなぐのが和英辞書テーブルで、辞書ID,分類ID,用語IDからなり、 分類ID,用語IDはそれぞれ分類一覧テーブル,用語一覧テーブルのそれとリレーションシップを 組んでいます。 メインフォーム(既定のビュー=単票フォーム)には分類フィールドを作り、コンボボックスにします。 分類を選択したときまたはその横に「表示」ボタンを設置しておいてそのボタンをクリックしたときに 選択された分類に属する用語一覧がサブフォーム(既定のビュー=帳票フォーム)にリロードされてるように切り替えて表示させたいと考えています。 メインフォーム元:分類一覧テーブル,サブフォーム元:用語一覧テーブルにしたフォームは作成できました。 メインフォームのレコードを切りかえるとサブフォームも切り替わりますが、 コンボボックスの選択でサブフォームを切りかえ(たように見せ)る上記のようなフォームに このフォームから編集することはできるでしょうか? 無理なら新規にフォームを作りなおすとしてできるでしょうか? 自分の発想で2通りやってみましたが、いずれも失敗でした。 (詳しく書いたら文字数が800を超えたので省略します) テーブルの構成やリレーションを多少変えてもいいしフォームのレコードソースにクエリービルダを使ったりVBを組んでもいいので、メインフォームのコンボボックスの選択値によってサブフォームの表示を切り替える方法について教えて下さい。

  • Accessフォーム

    Access初心者です。 Accessのフォーム上で、 [都道府県]のコンボボックスで東京都を選んだ場合、 [市区町村]のコンボボックスには「東京都」の市区町村名が選択できるようにしました。 フォームでの入力はきちんと出来るのですが、新しいレコードに入力すると、 前のレコードに入力した項目が消えてしまいます。 (テーブル上には、入力した情報が残っています) 色々試してみましたが、どうしても出来ません。 いったいどうしたらよいのでしょうか。ほとほと困っています。 どうかご教示ください。お願いいたします。

専門家に質問してみよう