Accessマクロで作る 受注管理「シート図番検索」フォームの作り方

シート受注の図番は、製品マスタで登録された規則性のある命名(材質・色調・硬度・厚み・サイズの組み合わせ)に沿っています。この規則性を活かし、5項目の絞り込み検索だけでお目当てのシート図番へ辿り着けるようにしたのが、シート類選択ポップアップです。受注新規登録ページ本体が長くなりすぎたため、この機能を独立したページとして切り出しました。

このページでは以下のことを解説しています。

  • 材質・色調・硬度・厚み・サイズの5項目による絞り込みで、目的のシート図番を確実に発見(各コンボは独立して選択可能)
  • シート図番の命名規則(接頭辞「KKR)-」)を活かした、対象データと工場を絞り込むベースクエリの設計
  • ワンタッチで全条件をクリアして全件表示に戻せる再検索ボタン
  • 呼び出し元(受注新規登録/仕入先発注成形課)に応じて転記先のフォーム・フィールドを自動で切り替える仕組み
  • 候補が0件の場合は、そのシート図番がまだ製品マスタに未登録であることの判断材料にもなる設計
  • 選んだシート図番と単価をワンクリックで呼び出し元フォームへ転記

シート類選択ポップアップの画面構成

絞り込み検索エリアの5つのコンボボックス(材質・色調・硬度・厚み・サイズ)と、検索結果を表示するサブフォームの2エリアで構成されています。上から順にコンボを選ぶたびに検索結果が絞り込まれ、目的のシート図番が見つかったら適用ボタンで呼び出し元のフォームへ転記します。

F20受注シート類選択フォーム フォームビュー

F20受注シート類選択フォーム デザインビュー

主な構成要素

コントロール 種別 役割
材質/色調/硬度/厚み/サイズ 非連結コンボ シート図番の絞り込み条件
件数 非連結テキスト 検索結果の件数を表示
検索結果サブフォーム サブフォーム 絞り込まれたシート図番の一覧(適用・図番・単価)
再検索ボタン ボタン 5つのコンボをすべてクリアし、全件表示に戻す
閉じるボタン ボタン ポップアップを閉じる

「件数」コントロールのコントロールソースは=Format(DCount("*","Q20受注シート類選択サブ"),"#,###")で、検索結果サブフォームの元クエリを直接カウントしています。

シート図番の命名ルールの解説ページ

シート図番命名

製品マスタの新規登録は管理者のみが実行できます。基本情報・営業課情報・工程情報をこのフォームで一括登録し、関連する課のテーブルに図番IDを自動追加することで各課担当者が課別情報を登録するベースが完成します。仕入先製品マスタへの登録もこのフォ[…]

シート図番の命名規則(材質・色調・硬度・厚み・サイズの組み合わせ)自体は、製品マスタの新規登録ページで解説しています。この規則性があるからこそ、5項目の絞り込みだけで目的の図番に確実に辿り着けます。逆に絞り込んでも候補が出てこない場合は、そのシート図番自体が製品マスタにまだ登録されていないということなので、先に製品マスタへの登録が必要です。


シート類と入力値を2本のクエリで絞り込む検索設計

検索結果は、シート類と対象工場を絞り込むベースクエリと、フォームの入力値でさらに絞り込むクエリの2本に分けて構成しています。役割ごとにクエリを分けることで、それぞれの抽出条件がシンプルになり、後から見直しやすい作りになっています。

ベースクエリ(Q20受注シート類選択)でシート図番と対象工場を絞り込む

T10製品Mから、シート図番であることを示す接頭辞「KKR)-」(製品マスタ登録時の命名ルール)と、取引先コード(対象工場)で対象データを絞り込みます。

Q20受注シート類選択クエリ デザインビュー

フィールド構成

フィールド テーブル 抽出条件
図番 T10製品M Like “KKR)-*”
単価 T10製品M
取引先コード T10製品M 2
ID T10製品M
シート図番には製品マスタ登録時点で「KKR)-」という接頭辞を必ず付けるルールになっています。この1つの命名規則があるおかげで、他の製品図番と混ざったテーブルからでもLike "KKR)-*"という単純な条件だけでシート類だけを正確に抜き出せます。

絞り込みクエリ(Q20受注シート類選択サブ)でフォームの入力値と連携する

ベースクエリの結果に対して、フォーム上の5つのコンボボックスの選択値をAND条件でさらに絞り込みます。

Q20受注シート類選択クエリ デザインビュー(>>>続く)

>>>続き

フィールド構成

フィールド テーブル 抽出条件
図番 Q20受注シート類選択 Like “” & [材質] & “” And Like “” & [色調] & “” And Like “” & [硬度] & “” And Like “” & [厚み] & “” And Like “” & [サイズ] & “
単価 Q20受注シート類選択
ID Q20受注シート類選択

5つのコンボは連鎖的に選択肢を絞り込む作りではなく、それぞれ独立したコンボです。図番の文字列そのものに材質・色調・硬度・厚み・サイズの情報がすべて含まれているため、選んだ値をLike演算子でAND連結するだけで、複合条件による絞り込みが1つの抽出条件式で完結します。

正直に言うと:1本のクエリにすべての条件をAndで連結する方法でも実現できるはずですが、今回は2本に分けて組み立てています。1つのクエリに条件を詰め込みすぎると式が長大になり、後から見直すときの可読性が落ちてしまうため、「シート類と対象工場を絞り込む」「フォームの入力値で絞り込む」という役割ごとにクエリを分けました。同じ結果に辿り着く方法は複数ありますが、保守のしやすさを優先してこの形に落ち着いています。

参考までに、1本にまとめる場合は図番フィールドの抽出条件セルに以下のように条件をAndで連結する書き方になります。

Like "KKR)-*" And Like "*" & [Forms]![F20受注シート類選択]![材質] & "*" And Like "*" & [Forms]![F20受注シート類選択]![色調] & "*" And Like "*" & [Forms]![F20受注シート類選択]![硬度] & "*" And Like "*" & [Forms]![F20受注シート類選択]![厚み] & "*" And Like "*" & [Forms]![F20受注シート類選択]![サイズ] & "*"

シート類選択ポップアップを開くマクロ設計

このポップアップは受注新規登録フォームだけでなく、仕入先発注成形課フォームからも呼び出されます。呼び出し元によって転記先を切り替えるため、開く際に「選択」という制御用の値を渡しています。

サブマクロ:シート類選択(シート図番選択フォーム開く)

サブマクロのテキスト表示
サブマクロ:シート類選択
フォームを開く(F20受注シート類選択, フォーム ビュー, , , , 標準)
値の代入
 アイテム = [Forms]![F20受注シート類選択]![F20受注シート類選択サブ]![選択]
 式    = 1
マクロの中止
サブマクロの最後

マクロの概要

項目 内容
目的 シート類選択ポップアップを開き、呼び出し元が受注新規登録であることを示す値(選択=1)をセットする
実行タイミング 受注新規登録フォームの「シート選択」ボタンクリック時
処理内容 フォームを標準モードで開く→選択コントロールへ1を代入

マクロの設置場所

項目 内容
格納先 F20受注新規フォームの「シート選択」ボタン
呼び出し元 ユーザーによるボタンクリック

◆リンクカード:仕入先発注成形課フォーム設計(URL未定)

仕入先発注成形課フォームからこのポップアップを開く際は、選択コントロールに2を代入する専用のマクロが使われます。詳細は仕入先発注成形課ページで解説予定です。

シート類選択ポップアップ自体は1つしかありませんが、開く直前に非表示の選択コントロールへ1または2を代入しておくことで、後述の適用ボタンのマクロがこの値を見て「今どちらの画面から呼ばれているか」を判断できます。同じ検索の仕組みを複数のフォームで共有しつつ、転記先だけを正しく切り替えられる作りです。

再検索ボタンのマクロ設計

再検索ボタンは、5つの絞り込みコンボをすべてクリアし、検索結果を全件表示の状態に戻します。

サブマクロ:再検索

サブマクロのテキスト表示
サブマクロ:再検索
値の代入
 アイテム = [材質]
 式    = Null
値の代入
 アイテム = [色調]
 式    = Null
値の代入
 アイテム = [硬度]
 式    = Null
値の代入
 アイテム = [サイズ]
 式    = Null
値の代入
 アイテム = [厚み]
 式    = Null
再クエリ
コントロール名
マクロの中止
サブマクロの最後

マクロの概要

項目 内容
目的 5つの絞り込みコンボをクリアし、シート類の全件表示に戻す
実行タイミング 再検索ボタンクリック時
処理内容 材質・色調・硬度・サイズ・厚みへNullを代入→再クエリ

マクロの設置場所

項目 内容
格納先 F20受注シート類選択フォームの「再検索」ボタン
呼び出し元 ユーザーによるボタンクリック

各コンボの更新後処理には、M99共通マクロの「再クエリ」を設定しています。コンボを選ぶたびにこのマクロが動き、絞り込みクエリの抽出条件(前述のLike連結式)が働いて検索結果サブフォームがその場で更新されます。


適用ボタンのマクロ設計(呼び出し元による転記先の分岐)

適用ボタンは、開いた時にセットされた「選択」の値(1または2)を見て、転記先のフォームとフィールドを切り替えます。

サブマクロ:シート類適用

サブマクロのテキスト表示
サブマクロ:シート類適用
If [Forms]![F20受注シート類選択]![F20受注シート類選択サブ]![選択]=1 Then
 値の代入
  アイテム = [Forms]![F20受注新規]![図番]
  式    = [Forms]![F20受注シート類選択]![F20受注シート類選択サブ]![図番]
 値の代入
  アイテム = [Forms]![F20受注新規]![単価]
  式    = [Forms]![F20受注シート類選択]![F20受注シート類選択サブ]![単価]
 ウィンドウを閉じる(フォーム, F20受注シート類選択, 確認)
 コントロールの移動(納期)
 マクロの中止
If 文の最後
If [Forms]![F20受注シート類選択]![F20受注シート類選択サブ]![選択]=2 Then
 値の代入
  アイテム = [Forms]![F31仕入先発注成形課]![仕入先コード]
  式    = 2
 値の代入
  アイテム = [Forms]![F31仕入先発注成形課]![図番]
  式    = [Forms]![F20受注シート類選択]![F20受注シート類選択サブ]![図番]
 ウィンドウを閉じる(フォーム, F20受注シート類選択, 確認)
 コントロールの移動(納期)
 マクロの実行 (M31仕入先発注成形.自動手番,,)
 マクロの中止
If 文の最後
サブマクロの最後

マクロの概要

項目 内容
目的 選んだシート図番を、呼び出し元に応じた正しいフォーム・フィールドへ転記する
実行タイミング 適用ボタンクリック時
処理内容 選択=1(受注新規登録)なら図番・単価を受注新規フォームへ転記/選択=2(仕入先発注成形課)なら仕入先コード・図番を仕入先発注成形課フォームへ転記し、自動採番マクロも実行→いずれもポップアップを閉じてから納期欄へフォーカス移動

マクロの設置場所

項目 内容
格納先 F20受注シート類選択フォームの「適用」ボタン(検索結果サブフォーム内)
呼び出し元 ユーザーによる適用ボタンクリック
同じ「適用」ボタン1つで、受注新規登録と仕入先発注成形課という異なるフォーム・異なるフィールド構成への転記に対応しています。If分岐の条件が「選択の値」だけといういたってシンプルな作りなので、今後3つ目の呼び出し元が増えた場合も、同じ考え方でIf文を1つ追加するだけで対応できます。

まとめ

シート類選択ポップアップは、製品マスタで統一されたシート図番の命名規則を土台に、2段階のクエリ(対象データの絞り込み→コンボによるAND絞り込み)で検索を成立させています。呼び出し元ごとに転記先を切り替える「選択」フラグの仕組みにより、受注新規登録と仕入先発注成形課という異なる業務フローから同じポップアップを再利用できる設計です。

本サイトではマクロを用いた構築手順を中心に紹介していますが、決してマクロを唯一の正解として推奨しているわけではありません。VBAが扱える環境であれば、より多彩で柔軟なプログラムが組めるVBAでの構築をむしろ推奨したいと考えています。

ここでマクロという選択肢を提示しているのは、VBAにハードルを感じている方への「もう一つの入り口」として、また将来的な後継者への引き継ぎ負荷を抑えるという実務上のメリットを考慮してのことです。設計の考え方の一つとして、状況に合わせて活用してください。