配合表マスタの新規登録フォームです。配合番号・原材料名・想定硬度・色調・基本配合量・配合剤1〜10と配合量1〜10・備考・確認者・承認者を入力し、登録ボタンでT65配合表Mに追加します。すべて非連結コントロールで構成し、登録時にDLookup相当の追加クエリでまとめて書き込む設計です。
配合表新規登録画面の構成
配合表リストの新規登録ボタンから起動します。配合剤・配合量は最大10種類まで入力でき、入力済みの分だけ合計配合重量が自動計算されます。
フォームビュー
配合作成者・配合番号・原材料名・想定硬度・色調・基本配合量・備考を左側に、配合剤1〜10と配合量1〜10を右側の一覧形式で配置した1画面完結の入力フォームです。
F65配合表新規 ポップアップフォームビュー
画面の概要
画面上のコントロールと役割をまとめています。
画面の概要
| 項目 | 内容 |
|---|---|
| 配合作成者 | コンボボックスで従業員コードを選択。右側に =[従業員コード].[Column](1) で従業員名を表示 |
| 配合番号 | 手入力。左側から決められた番号法則+末尾の送り番で登録者が空き番号を決めて入力 |
| 使用済配合番号ボタン | 既存の配合番号一覧を参照フォームで表示(重複確認用の閲覧専用) |
| 原材料名 | 手入力 |
| 想定硬度 | 配合時点では硬度が未確定のためこの表示名にしているが、格納先は硬度フィールド |
| 色調 | 手入力 |
| 基本配合量 | kg単位で入力する基本重量 |
| 配合剤1〜10/配合量1〜10 | 配合剤はコンボボックスで選択、配合量はg単位で入力。配合剤1・配合量1のみ必須 |
| 合計配合重量 | 配合量1〜10の入力済み分を自動合計表示(非連結・計算式) |
| 備考 | 手入力 |
| 確認者/承認者 | コンボボックスで従業員コードを選択。右側に=[XXXコード].[Column](1) で従業員名を表示 |
| 登録ボタン | 入力チェック後、追加クエリでT65配合表Mへ書き込み |
| クリアボタン | 全項目をNullでクリア |
| 閉じるボタン | フォームを閉じる |
デザインビューで見る仕組み
フォームのセクション構成とコントロール配置を確認します。
デザインビュー
各コントロールは非連結で配置され、配合作成者・確認者・承認者のグレー枠にはコンボボックスの列参照によるDLookup相当の表示が組み込まれています。
F65配合表新規 ポップアップデザインビュー
デザインビューの概要
詳細セクション・フォームフッターの構成をまとめています。
デザインビューの概要
| セクション | 内容 |
|---|---|
| 詳細セクション | 配合作成者・配合番号(+使用済配合番号ボタン)・原材料名・想定硬度・色調・基本配合量・備考・配合剤1〜10/配合量1〜10・合計配合重量・確認者・承認者を配置 |
| フォームフッター | 登録・クリア・閉じるの3ボタンを配置 |
合計配合重量の自動計算
配合量1〜10の入力済み分を合計し、未入力(Null)は0として扱う計算式を非連結コントロールに設定しています。
合計配合重量の概要
| 項目 | 内容 |
|---|---|
| コントロールソース | =IIf(IsNull([配合量1]),Null,Nz([配合量1])+Nz([配合量2])+Nz([配合量3])+Nz([配合量4])+Nz([配合量5])+Nz([配合量6])+Nz([配合量7])+Nz([配合量8])+Nz([配合量9])+Nz([配合量10])) |
| 動作 | 配合量1が未入力ならNull(未計算)表示、入力済みならNz関数で各配合量のNullを0扱いして合計 |
| 用途 | 基本配合量(kg)に対する配合剤の合計重量(g)を目視確認するための参考値 |
配合剤には0.005g単位の極少量で配合するものもあり、合計配合重量はg単位の細かい積み上げをそのまま合算する設計になっています。
クエリ:Q65配合表新規追加の構成
登録ボタンから呼び出される追加クエリです。フォーム上の各コントロールの値を式フィールドとして定義し、T65配合表Mへレコードを追加します。
クエリデザインビュー
配合番号から承認者コードまで30個の式フィールドがすべてフォーム参照式になっており、テーブルを直接参照せずフォーム上の入力値だけで1レコード分のデータを組み立てています。
Q65配合表新規追加 クエリデザインビュー(一部)
Q65配合表新規追加 フィールド構成
30個の式フィールドと追加先フィールドの対応をまとめています。
Q65配合表新規追加クエリ フィールド構成
| 式番号 | 内容 | 追加先フィールド |
|---|---|---|
| 式1 | [Forms]![F65配合表新規]![配合番号] | 配合番号 |
| 式2 | Date() | 登録日 |
| 式3 | [Forms]![F65配合表新規]![原材料名] | 原材料名 |
| 式4 | [Forms]![F65配合表新規]![想定硬度] | 硬度 |
| 式5 | [Forms]![F65配合表新規]![色調] | 色調 |
| 式6〜式15 | [Forms]![F65配合表新規]![配合剤1]〜[配合剤10] | 配合剤1〜配合剤10 |
| 式16〜式25 | [Forms]![F65配合表新規]![配合量1]〜[配合量10] | 配合量1〜配合量10 |
| 式26 | [Forms]![F65配合表新規]![備考] | 備考 |
| 式27 | [Forms]![F65配合表新規]![従業員コード] | 従業員コード |
| 式28 | [Forms]![F65配合表新規]![基本配合量] | 基本配合量 |
| 式29 | [Forms]![F65配合表新規]![確認者コード] | 確認者コード |
| 式30 | [Forms]![F65配合表新規]![承認者コード] | 承認者コード |
各コントロールの設定
新規登録フォーム上の各コントロールの動作を1つずつ解説します。
新規登録ボタン(F65配合表リストから起動)
配合表リストの新規登録ボタンから、F65配合表新規をフォームビューで開くマクロです。
サブマクロ:新規登録開く
- サブマクロのテキスト表示
-
サブマクロ:新規登録開く フォームを開く フォーム名 = F65配合表新規 ビュー = フォーム ビュー フィルター名 = Where 条件式 = データ モード = ウィンドウ モード = 標準 マクロの中止 サブマクロの最後
マクロの概要
| 項目 | 内容 |
|---|---|
| 対象フォーム | F65配合表新規 |
| ビュー | フォーム ビュー |
| 動作 | 新規登録フォームを標準ウィンドウモードで開く |
マクロの設置場所
| 設置場所 | イベント |
|---|---|
| F65配合表リスト:新規登録ボタン | クリック時 |
使用済配合番号ボタン
既存の配合番号一覧をF65配合番号使用済フォームで表示し、登録者が空き番号を目視確認できるようにするボタンです。あくまで参照専用で、行を選んで新規登録フォームへ値を戻す機能はありません。
サブマクロ:使用済配合番号
- サブマクロのテキスト表示
-
サブマクロ:使用済配合番号 フォームを開く(F65配合番号使用済, フォーム ビュー, , , , 標準) マクロの中止 サブマクロの最後
マクロの概要
| 項目 | 内容 |
|---|---|
| 対象フォーム | F65配合番号使用済 |
| ビュー | フォーム ビュー |
| 動作 | 既存配合番号の一覧を標準ウィンドウモードで開く |
マクロの設置場所
| 設置場所 | イベント |
|---|---|
| F65配合表新規:使用済配合番号ボタン | クリック時 |
F65配合番号使用済 ポップアップフォームビュー
F65配合番号使用済フォームは配合番号検索の1条件のみで絞り込める簡易な参照フォームです。Q65配合番号使用済サブが元になっています。
Q65配合番号使用済サブ クエリデザインビュー
Q65配合番号使用済サブ クエリの概要
| 項目 | 内容 |
|---|---|
| 対象テーブル | T65配合表M |
| 抽出条件(配合番号) | Like [forms]![F65配合番号使用済]![配合番号検索] & “*” |
| 表示フィールド | 配合番号・原材料名・色調・硬度・ID |
配合剤コンボボックス(1〜10)
配合剤1〜10はそれぞれ独立したコンボボックスで、資材マスタの資材名をテキストとして選択します。配合剤1のみ入力必須で、配合剤2〜10は任意入力です。
確認者・承認者・配合作成者のDLookup表示
配合作成者・確認者・承認者はいずれもコンボボックスで従業員コードを選択し、右側の非連結テキストボックスに=[従業員コード].[Column](1)のようなコンボボックスの列参照式で氏名(または略称)を表示しています。
クリアボタン
配合作成者・配合番号・原材料名・硬度・色調・配合剤1〜10・配合量1〜10・基本配合量・備考・確認者コード・承認者コードのすべてをNullに戻すクリアボタンです。
サブマクロ:新規クリア
- サブマクロのテキスト表示
-
サブマクロ:新規クリア 値の代入 [従業員コード]、Null 値の代入 [配合番号]、Null 値の代入 [原材料名]、Null 値の代入 [硬度]、Null 値の代入 [色調]、Null 値の代入 [配合剤1]、Null 値の代入 [配合剤2]、Null 値の代入 [配合剤3]、Null 値の代入 [配合剤4]、Null 値の代入 [配合剤5]、Null 値の代入 [配合剤6]、Null 値の代入 [配合剤7]、Null 値の代入 [配合剤8]、Null 値の代入 [配合剤9]、Null 値の代入 [配合剤10]、Null 値の代入 [配合量1]、Null 値の代入 [配合量2]、Null 値の代入 [配合量3]、Null 値の代入 [配合量4]、Null 値の代入 [配合量5]、Null 値の代入 [配合量6]、Null 値の代入 [配合量7]、Null 値の代入 [配合量8]、Null 値の代入 [配合量9]、Null 値の代入 [配合量10]、Null 値の代入 [基本配合量]、Null 値の代入 [備考]、Null 値の代入 [確認者コード]、Null 値の代入 [承認者コード]、Null マクロの中止 サブマクロの最後
マクロの概要
| 項目 | 内容 |
|---|---|
| 処理内容 | 入力項目すべてをNullでクリア |
| 対象外 | なし(全項目対象) |
マクロの設置場所
| 設置場所 | イベント |
|---|---|
| F65配合表新規:クリアボタン | クリック時 |
登録ボタン
未入力チェック(配合作成者・配合番号・原材料名・硬度・色調・配合剤1・配合量1・基本配合量・確認者・承認者)を順に行い、配合番号の重複チェックを経てから確認メッセージを表示し、Q65配合表新規追加を実行して登録するマクロです。
サブマクロ:登録
- サブマクロのテキスト表示
-
サブマクロ:登録 If IsNull([従業員コード]) Then メッセージボックス(配合作成者が入力されていません, はい, 警告, 未記入) コントロールの移動(従業員コード) マクロの中止 If 文の最後 If IsNull([配合番号]) Then メッセージボックス(配合番号が入力されていません, はい, 警告, 未記入) コントロールの移動(配合番号) マクロの中止 If 文の最後 If IsNull([原材料名]) Then メッセージボックス(原材料名が入力されていません, はい, 警告, 未記入) コントロールの移動(原材料名) マクロの中止 If 文の最後 If IsNull([硬度]) Then メッセージボックス(硬度が入力されていません, はい, 警告, 未記入) コントロールの移動(硬度) マクロの中止 If 文の最後 If IsNull([色調]) Then メッセージボックス(色調が入力されていません, はい, 警告, 未記入) コントロールの移動(色調) マクロの中止 If 文の最後 If IsNull([配合剤1]) Then メッセージボックス(配合剤1が入力されていません, はい, 警告, 未記入) コントロールの移動(配合剤1) マクロの中止 If 文の最後 If IsNull([配合量1]) Then メッセージボックス(配合量1が入力されていません, はい, 警告, 未記入) コントロールの移動(配合量1) マクロの中止 If 文の最後 If IsNull([基本配合量]) Then メッセージボックス(基本配合量が入力されていません, はい, 警告, 未記入) コントロールの移動(基本配合量) マクロの中止 If 文の最後 If IsNull([確認者コード]) Then メッセージボックス(確認者が入力されていません, はい, 警告, 未記入) コントロールの移動(確認者コード) マクロの中止 If 文の最後 If IsNull([承認者コード]) Then メッセージボックス(承認者が入力されていません, はい, 警告, 未記入) コントロールの移動(承認者コード) マクロの中止 If 文の最後 If DCount("配合番号","T65配合表M","[配合番号] = [Forms]![F65配合表新規]![配合番号] ")<>0 Then メッセージボックス(登録しようとしたデータの配合番号は既に登録されています。配合番号を取り直してください。, はい, 警告, エラー) コントロールの移動(配合番号) マクロの中止 If 文の最後 警告音 If MsgBox("新規配合表を登録してよろしいですか?",4+32,"確認")=6 Then メッセージの設定(いいえ) クエリを開く(Q65配合表新規追加, データシート, 編集) メッセージボックス(新規の配合表を登録しました, はい, なし, 登録) 値の代入 [Forms]![F65配合表リスト]![配合番号検索]、[Forms]![F65配合表新規]![配合番号] ウィンドウを閉じる(フォーム, F65配合表新規, 確認) 再クエリ () マクロの中止 Else メッセージボックス(処理を中止します, はい, なし, 中止) マクロの中止 If 文の最後 サブマクロの最後
マクロの概要
| 項目 | 内容 |
|---|---|
| 必須チェック項目 | 配合作成者・配合番号・原材料名・硬度・色調・配合剤1・配合量1・基本配合量・確認者・承認者(配合剤2〜10・配合量2〜10は任意) |
| 重複チェック | DCountでT65配合表M内の配合番号一致件数を確認。0件以外はエラー表示して中止 |
| 確認メッセージ | 「新規配合表を登録してよろしいですか?」で登録意思を最終確認 |
| 登録処理 | Q65配合表新規追加をデータシートビューで開き実行 |
| 登録後の処理 | F65配合表リストの配合番号検索に新しい配合番号をセットし、新規登録フォームを閉じて再クエリ |
マクロの設置場所
| 設置場所 | イベント |
|---|---|
| F65配合表新規:登録ボタン | クリック時 |
閉じるボタン
フォームを閉じるボタンです。M99共通.閉じるを呼び出す共通処理で統一されています。
閉じるボタンの解説はこちら
フォームごとに同じ処理のマクロを個別に作ると、マクロの数が際限なく増えて管理が大変になります。M99共通マクロはどのフォームでも使い回せる処理をサブマクロとして一箇所に集約したものです。コントロール名を統一しておくことでフォームを問わず同じ[…]
まとめ
配合表新規登録は非連結フォーム+DLookup相当の表示+Q65配合表新規追加による一括書き込みという、他マスタと共通の3点セット構成です。合計配合重量はNzを使ったNull安全な合計計算、必須チェックは配合剤1・配合量1のみに絞った実務的な設計、登録後は新規データにフォーカスしたリスト画面へ戻る演出と、随所に運用に即した工夫が見られます。
本サイトではマクロを用いた構築手順を中心に紹介していますが、決してマクロを唯一の正解として推奨しているわけではありません。VBAが扱える環境であれば、より多彩で柔軟なプログラムが組めるVBAでの構築をむしろ推奨したいと考えています。
ここでマクロという選択肢を提示しているのは、VBAにハードルを感じている方への「もう一つの入り口」として、また将来的な後継者への引き継ぎ負荷を抑えるという実務上のメリットを考慮してのことです。設計の考え方の一つとして、状況に合わせて活用してください。