Accessマクロで作る 製造管理「仕入先受入登録」フォームの作り方

受入登録とは、外製した製品の受入データおよび受入検査を記録に残す作業です。このフォームは成形課・加工課・印刷課で共用する設計になっており、メインメニューの各カテゴリーの受入登録ボタンから開くと、その部署専用の画面として振る舞います。ここでは成形課の受入登録を紹介します。

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

  • 受入登録フォームの画面構成と、部署共用フォームである仕組み
  • 手配番号コンボから対象データを特定する仕組み
  • 「納期回答より選択」サブフォームから対象データを特定する仕組み
  • 登録済み受入履歴サブフォームの構成
  • 登録ボタン・キャンセルボタンのマクロ設計

Access仕入先受入登録フォームの画面構成

メインメニューの成形課カテゴリーにある受入登録ボタンから開く画面です。手配番号を指定して受入日・数量・合否などを入力し、登録ボタンでT32仕入先受入Mテーブルへ追加します。

製造管理受入登録 ポップアップフォーム

F32仕入先受入 ポップアップフォームデザインビュー

このフォームは成形課・加工課・印刷課で使い回す共通設計です。メインメニューの各カテゴリーの受入登録ボタンから開く際に、開くマクロが「部署区分」へ値を代入し、その値からどの部署の受入登録かをテキスト表示しています。

サブマクロ:成形受入登録

サブマクロのテキスト表示
サブマクロ:成形受入登録
フォームを開く(F32仕入先受入, フォーム ビュー, , , , 標準)
値の代入
 アイテム = [Forms]![F32仕入先受入]![部署区分]
 式    = 1
再クエリ ()
マクロの中止
サブマクロの最後

マクロの概要

項目 内容
目的 部署区分に1(成形課)を代入し、成形課専用の受入登録画面として開く
実行タイミング メインメニュー成形課カテゴリーの「受入登録」ボタンクリック時
処理内容 フォームを開く→部署区分=1を代入→再クエリ

マクロの設置場所

項目 内容
格納先 F00メインメニューフォームの「受入登録」ボタン(成形課カテゴリー)
呼び出し元 ユーザーによる受入登録ボタンクリック
区分ラベルのコントロールソースは=IIf([部署区分]=1,"成形課受入",IIf([部署区分]=2,"加工課受入",IIf([部署区分]=3,"印刷課受入")))という演算式です。部署区分という1つの数値だけを切り替えれば、画面のタイトル表示までまとめて変わる仕組みになっています。

主な構成要素

コントロール 種別 役割
手配番号 コンボボックス 対象データを直接指定
仕入先/図番/数量/単価/金額/納期/元手配番号 非連結(グレー表示) 手配番号選択時に自動展開される参照専用項目
分納残数/分納回数 非連結(グレー表示) 参照専用の管理項目
受入日 非連結(既定値=Date()) 受入した日付
受入数量 非連結 受入した数量
合否 チェックボックス2択 合格/不合格
完納・分納 チェックボックス2択 完納/分納
備考 非連結テキスト 更新後処理で半角統一
登録者 コンボボックス(非連結) 開く時にログイン従業員を自動セット
部署区分/図番ID/現品票区分/成形課・加工課・印刷課チェックボックス/作業工程コード/納期回答ID 非連結(非表示) 区分振り分けや連動処理に使う内部制御項目
納期回答より選択サブフォーム サブフォーム 外注先からの納期回答データを一覧表示し、適用ボタンで転記
登録済み受入履歴サブフォーム サブフォーム 同一手配番号の受入実績一覧+合計数量
登録/キャンセル/閉じるボタン ボタン 各種機能ボタン

デザインビュー加飾番号の対応

デザインビューには①〜⑫の番号が加飾されており、それぞれ次のコントロールを示しています。

番号 コントロール 内容
① 区分ラベル =IIf([部署区分]=1,"成形課受入",IIf([部署区分]=2,"加工課受入",IIf([部署区分]=3,"印刷課受入")))
② 部署区分 可視:いいえ
③ 図番ID 可視:いいえ
④ 分納残数 ―
⑤ 分納回数 ―
⑥ 現品票区分 可視:いいえ
⑦ 成形課チェックボックス 可視:いいえ
⑧ 加工課チェックボックス 可視:いいえ
⑨ 印刷課チェックボックス 可視:いいえ
⑩ 作業工程コード 可視:いいえ
⑪ 条件 可視:いいえ
⑫ 納期回答ID 可視:いいえ
②〜⑫の大半は画面上には見えない非表示コントロールですが、成形課・加工課・印刷課いずれの受入データかを判定するためのフラグや、納期回答からの転記に必要な内部キー(納期回答ID)をここに保持しています。見た目をシンプルに保ちながら、裏側では部署振り分けに必要な情報をすべて抱え込んでいる設計です。

受入登録フォームを開く時の処理

フォームを開いた瞬間に、ログイン中の従業員をそのまま登録者としてセットします。

サブマクロ:受入登録開く時

サブマクロのテキスト表示
サブマクロ:受入登録開く時
値の代入
 アイテム = [Forms]![F32仕入先受入]![登録者コード]
 式    = DLookup("従業員コード","T01従業員M","[従業員コード]=[Forms]![F00メインメニュー]![従業員コード]")
再クエリ ()
マクロの中止
サブマクロの最後

マクロの概要

項目 内容
目的 ログイン中の従業員コードを登録者コンボへ自動セットする
実行タイミング フォームを開いた直後
処理内容 DLookupでログイン従業員コードを取得→登録者コードへ代入→再クエリ

マクロの設置場所

項目 内容
格納先 F32仕入先受入フォームの「開く時」イベント
呼び出し元 フォームを開いた際に自動実行

手配番号からのデータ特定

対象の仕入先発注データが手配番号で分かっている場合は、手配番号コンボから直接選択します。

手配番号コンボボックス クエリ ビルダー

手配番号コンボの元クエリの構成

フィールド テーブル 抽出条件
手配番号/図番 T31仕入先発注M ―
略称 T05取引先M ―
分納残数 T31仕入先発注M >0
仕入先コード T31仕入先発注M <>1 And <>2
仕入先コードの1は本社工場、2は群馬工場という自社拠点を表すコードです。受入登録の対象はあくまで外製した製品なので、この2つを除外することで自社製造分(仕入先単価0円の内製データ)が手配番号の候補に紛れ込まないようにしています。

手配番号特定後のアクション

手配番号を特定したあとは更新後処理イベントで受入表示サブマクロが動いてフォームにデータを表示させます。

サブマクロ:受入表示

サブマクロのテキスト表示
サブマクロ:受入表示
値の代入
 アイテム = [Forms]![F32仕入先受入]![仕入先コード]
 式    = DLookup("仕入先コード","T31仕入先発注M","[手配番号]=[forms]![F32仕入先受入]![手配番号]")
値の代入
 アイテム = [Forms]![F32仕入先受入]![図番]
 式    = DLookup("図番","T31仕入先発注M","[手配番号]=[forms]![F32仕入先受入]![手配番号]")
値の代入
 アイテム = [Forms]![F32仕入先受入]![図番ID]
 式    = DLookup("図番ID","T31仕入先発注M","[手配番号]=[forms]![F32仕入先受入]![手配番号]")
値の代入
 アイテム = [Forms]![F32仕入先受入]![数量]
 式    = DLookup("数量","T31仕入先発注M","[手配番号]=[forms]![F32仕入先受入]![手配番号]")
値の代入
 アイテム = [Forms]![F32仕入先受入]![単価]
 式    = DLookup("仕入先単価","T31仕入先発注M","[手配番号]=[forms]![F32仕入先受入]![手配番号]")
値の代入
 アイテム = [Forms]![F32仕入先受入]![金額]
 式    = DLookup("数量","T31仕入先発注M","[手配番号]=[forms]![F32仕入先受入]![手配番号]")*DLookup("仕入先単価","T31仕入先発注M","[手配番号]=[forms]![F32仕入先受入]![手配番号]")
値の代入
 アイテム = [Forms]![F32仕入先受入]![納期]
 式    = DLookup("[T31仕入先発注M].[納期]-[T31仕入先発注M].[納期設定]","T31仕入先発注M","[手配番号]=forms![F32仕入先受入]![手配番号]")
値の代入
 アイテム = [Forms]![F32仕入先受入]![分納残数]
 式    = DLookup("分納残数","T31仕入先発注M","[手配番号]=forms![F32仕入先受入]![手配番号]")
値の代入
 アイテム = [Forms]![F32仕入先受入]![分納回数]
 式    = DLookup("分納回数","T31仕入先発注M","[手配番号]=forms![F32仕入先受入]![手配番号]")
値の代入
 アイテム = [Forms]![F32仕入先受入]![成形課]
 式    = DLookup("成形課","T31仕入先発注M","[手配番号]=forms![F32仕入先受入]![手配番号]")
値の代入
 アイテム = [Forms]![F32仕入先受入]![加工課]
 式    = DLookup("加工課","T31仕入先発注M","[手配番号]=forms![F32仕入先受入]![手配番号]")
値の代入
 アイテム = [Forms]![F32仕入先受入]![印刷課]
 式    = DLookup("印刷課","T31仕入先発注M","[手配番号]=forms![F32仕入先受入]![手配番号]")
値の代入
 アイテム = [Forms]![F32仕入先受入]![現品票区分]
 式    = DLookup("現品票区分","T31仕入先発注M","[手配番号]=forms![F32仕入先受入]![手配番号]")
値の代入
 アイテム = [Forms]![F32仕入先受入]![手配番号元]
 式    = DLookup("手配番号元","T31仕入先発注M","[手配番号]=forms![F32仕入先受入]![手配番号]")
再クエリ ()
コントロールの移動 (受入日)
マクロの中止
サブマクロの最後

マクロの概要

項目 内容
目的 手配番号をキーにT31仕入先発注Mの現在値を各コントロールへ展開する
実行タイミング 手配番号コンボの更新後
処理内容 全項目をDLookupで展開→再クエリ→受入日コントロールへ移動

マクロの設置場所

項目 内容
格納先 F32仕入先受入フォームの「手配番号」コンボ(更新後処理)
呼び出し元 ユーザーによる手配番号選択時
納期コントロールの展開式は[T31仕入先発注M].[納期]-[T31仕入先発注M].[納期設定]となっています。製品マスタ由来のリードタイム分(納期設定)をあらかじめ差し引いた日付を表示することで、受入担当者が実際に動くべき目安日をそのまま確認できるようになっています。

「納期回答より選択」サブフォームの構成

手配番号がすぐに分からない場合のために、外注先からの納期回答データを一覧表示し、そこから対象を選べるサブフォームを設置しています。日付・仕入先の2条件で絞り込めるようになっています。サブフォームには外注さんから納期回答がされていて生産管理で登録されているデータが表示されています。

サブフォームのクエリ構成

手配番号・図番・数量に加えて、仕入先名や適用状況まで1つのクエリにまとめて、サブフォームの一覧表示に必要な情報を揃えています。

Q32仕入先受入納期回答サブ クエリデザインビュー

つづき

「納期回答より選択」サブフォーム(Q32仕入先受入納期回答サブ)のクエリ構成

フィールド テーブル 抽出条件
手配番号/図番/数量 T86外注納期回答 ―
納期回答 T86外注納期回答 Is Null Or Like “” & [FORMS]![F32仕入先受入]![日付] & ““
ID T86外注納期回答 ―
完納ロット 演算フィールド IIf([T86外注納期回答].[完納ロット]=1,”完納”,”分納”)
仕入先コード T31仕入先発注M <>2
仕入先名(略称) T05取引先M Is Null Or Like “” & [FORMS]![F32仕入先受入]![仕入先検索] & ““
日報適用 T86外注納期回答 ―
出荷準備完了 T86外注納期回答 False
部署区分 T86外注納期回答 [Forms]![F32仕入先受入]![部署区分]
分納残数 T31仕入先発注M >0
手配 T31仕入先発注M True
このクエリの仕入先コード抽出条件は<>2のみです。手配番号コンボの元クエリでは本社(1)・群馬(2)の両方を除外していましたが、成形課は群馬工場にしか存在しないため、成形課データが仕入先コード1(本社)に紛れ込むことはありません。納期回答のデータソースには本社にある加工課データも混在しているため、<>2だけで実質的に外製先のみへ絞り込めています。

日付・仕入先による絞り込み操作

一覧が多くなりがちな納期回答データを、日付と仕入先名の2条件で絞り込めるようにしています。

「納期回答より選択」サブフォーム

タイトル横の「日付」ボックスには、今日・前日・翌日ボタンで生産管理部署が成形予定を組んでいる日付を指定でき、サブフォームがその日付に近い予定でリクエリされます。前後の日付でも表示されるため、予定と多少ずれていても近似日で選択できます。仕入先名でも絞り込み可能です。

今日ボタンの設計はこちら>>>

前日 翌日ボタンの設計はこちら>>>

今日・前日・翌日ボタンはいずれもM99共通マクロが動作します。仕組みの詳細は上記のリンク先を参照してください。

CL ボタンのマクロ

「日付」ボックスをクリアにしてサブフォーム表示をリクエリします。

サブマクロ:日付CL

サブマクロのテキスト表示
サブマクロ:日付CL
値の代入
 アイテム = [日付]
 式    = Null
再クエリ ()
マクロの中止
サブマクロの最後

マクロの概要

項目 内容
目的 日付ボックスをクリアし、絞り込みを解除する
実行タイミング CLボタンクリック時
処理内容 日付=Null→再クエリ

マクロの設置場所

項目 内容
格納先 F32仕入先受入フォームの「CL」ボタン(日付ボックス横)
呼び出し元 ユーザーによるCLボタンクリック

仕入先名での絞り込みには専用のコンボボックスを使っています。このコンボのコントロールソースは、上記の納期回答サブと同じクエリから仕入先名だけをグループ化して抽出した集計クエリで構成しています(2段階構成)。

仕入先コンボ集計クエリ クエリ ビルダー

仕入先コンボの集計クエリの構成

フィールド 元クエリ 集計 抽出条件
仕入先名 Q32仕入先受入納期回答サブ グループ化(並べ替え:昇順) Is Not Null

適用ボタンのマクロ設計

一覧から選んだ納期回答データを、適用ボタン1つで手配番号欄へ転記し、重複して同じデータを登録しないよう適用済みフラグも同時に管理します。

サブマクロ:適用

サブマクロのテキスト表示
サブマクロ:適用
If [日報適用]=False Then
 値の代入
  アイテム = [Forms]![F32仕入先受入]![納期回答ID]
  式    = [Forms]![F32仕入先受入]![F32仕入先納期回答サブ]![ID]
 値の代入
  アイテム = [Forms]![F32仕入先受入]![手配番号]
  式    = DLookup("手配番号","T86外注納期回答","[ID]=[Forms]![F32仕入先受入]![納期回答ID]")
 メッセージの設定 (いいえ)
 クエリを開く (Q32仕入先受入納期回答適用更新, データシート, 編集)
 マクロの実行 (M32仕入先受入.受入表示,,)
 マクロの中止
Else
 メッセージの設定 (いいえ)
 クエリを開く (Q32仕入先受入納期回答適用否更新, データシート, 編集)
 コントロールの移動 (閉じる)
 マクロの実行 (M32仕入先受入.キャンセル,,)
 マクロの中止
If 文の最後
サブマクロの最後

マクロの概要

項目 内容
目的 選んだ納期回答行が未適用なら手配番号を転記して受入表示を実行し、適用フラグを立てる。既に適用済みなら処理を中止してキャンセルを実行する
実行タイミング 「納期回答より選択」サブフォームの「適用」ボタンクリック時
処理内容 日報適用フラグをチェック→未適用なら納期回答IDと手配番号を転記→適用フラグ更新→受入表示実行/適用済みなら適用否更新→キャンセル実行

マクロの設置場所

項目 内容
格納先 F32仕入先受入納期回答サブフォームの「適用」ボタン
呼び出し元 ユーザーによる適用ボタンクリック

マクロ内で実行される更新クエリ

Q32仕入先受入納期回答適用更新 クエリデザインビュー

Q32仕入先受入納期回答適用否更新 クエリデザインビュー

納期回答適用更新クエリの構成

クエリ名 レコードの更新 抽出条件(ID)
Q32仕入先受入納期回答適用更新 日報適用=True [Forms]![F32仕入先受入]![F32仕入先納期回答サブ]![ID]
Q32仕入先受入納期回答適用否更新 日報適用=False [Forms]![F32仕入先受入]![F32仕入先納期回答サブ]![ID]

行のハイライト表示

一覧のどの行を選んでいるか、どの行が適用済みかをひと目で判別できるよう、条件付き書式で行の色を切り替えています。

製造管理受入フォーム条件付き書式

サブフォームの行には条件付き書式が設定されており、フォーカスがある行・すでに適用済み(日報適用=True)の行・カレント行(行色ハイライト)で表示色が切り替わります。

ルール 書式
フォーカスがある 黄色
日報適用=True グレー
ID=行色 黄色

非連結の行色ハイライトの仕組み

関連記事

Accessのフォームにおける「色」は、単なるデザイン要素ではありません。オペレーターが今どこにいて何をすべきかを直感的に伝えるための「重要なナビゲーション」だと考えています。 画面を開いた瞬間に「新規登録」か「編集」かを色で感じ取り、無[…]

行色ハイライトの仕組みは本システムの全リストで共通採用しているため、詳細は上記のリンク先を参照してください。

「登録済み受入履歴」サブフォームの構成

同一手配番号で過去に受入登録されたデータを一覧表示します。

Q32仕入先受入サブ クエリデザインビュー

登録済み受入履歴サブフォーム(Q32仕入先受入サブ)のクエリ構成

フィールド テーブル 抽出条件
受入日/数量/備考 T32仕入先受入M ―
手配番号 T32仕入先受入M [Forms]![F32仕入先受入]![手配番号]
ID T32仕入先受入M ―
合否a 演算フィールド IIf([合否]=1,”合格”,IIf([合否]=2,”不合格”))
状態 演算フィールド IIf([未完分]=1,”完納”,IIf([未完分]=2,”分納”))
略称 T01従業員M ―

サブフォーム下部の数量合計は=Sum([数量])をコントロールソースとした非連結コントロールで表示しています。


登録ボタンのマクロ設計

入力内容を検証したうえでT32仕入先受入Mへ追加し、あわせて仕入先発注データの分納残数・回数を更新します。

サブマクロ:登録

サブマクロのテキスト表示
サブマクロ:登録
If IsNull([手配番号]) Then
 メッセージボックス (登録する手配番号が入力されていません, はい, 警告, 未入力)
 コントロールの移動 (手配番号)
 マクロの中止
If 文の最後
If IsNull([受入日]) Then
 メッセージボックス (登録する受入日が入力されていません, はい, 警告, 未入力)
 コントロールの移動 (受入日)
 マクロの中止
If 文の最後
If IsNull([数量受入]) Then
 メッセージボックス (登録する数量が入力されていません, はい, 警告, 未入力)
 コントロールの移動 (数量受入)
 マクロの中止
If 文の最後
If [合否]=False Then
 メッセージボックス (合否が入力されていません, はい, 警告, 未入力)
 コントロールの移動 (合否)
 マクロの中止
If 文の最後
If [未完分]=False Then
 メッセージボックス (完納・分納が入力されていません, はい, 警告, 未入力)
 コントロールの移動 (未完分)
 マクロの中止
If 文の最後
警告音
If MsgBox("受入登録をしてもよろしいですか?",4+32,"確認")=6 Then
 メッセージの設定 (いいえ)
 クエリを開く (Q32仕入先受入追加, データシート, 編集)
 クエリを開く (Q32仕入先受入分納更新, データシート, 編集)
 メッセージボックス (受入を登録しました, はい, なし, 登録済)
 マクロの実行 (M32仕入先受入.キャンセル,,)
 マクロの中止
Else
 メッセージボックス (処理を中止しました, はい, なし, 中止)
 マクロの中止
If 文の最後
サブマクロの最後

マクロの概要

項目 内容
目的 必須項目を検証したうえでT32仕入先受入Mへレコードを追加し、仕入先発注データの分納状況を更新する
実行タイミング 登録ボタンクリック時
処理内容 手配番号・受入日・数量・合否・完納分納のNullチェック→確認ダイアログ→追加クエリ・分納更新クエリ実行→完了メッセージ→キャンセル実行

マクロの設置場所

項目 内容
格納先 F32仕入先受入フォームの「登録」ボタン
呼び出し元 ユーザーによる登録ボタンクリック

マクロ内で実行される追加・更新クエリ

追加クエリで受入登録データをテーブルに保存します。
更新クエリで仕入先発注データの分納回数と分納残数を受入回数と受入数量を参照して更新します。

Q32仕入先受入追加 クエリデザインビュー

つづき

登録追加クエリ(Q32仕入先受入追加)の構成

フィールド(追加先) 内容
手配番号/受入日/数量/仕入先単価/金額/登録者コード/備考/合否/未完分/図番/図番ID/仕入先コード/成形課/加工課/印刷課/現品票区分/手配番号元/作業工程コード/部署区分/納期回答ID [Forms]![F32仕入先受入]![各コントロール](すべてコントロール名=フィールド名で参照)
レコードの追加先 T32仕入先受入M

Q32仕入先受入分納更新 クエリデザインビュー

分納更新クエリ(Q32仕入先受入分納更新)の構成

フィールド レコードの更新
分納残数 [Forms]![F32仕入先受入]![分納残数]-[Forms]![F32仕入先受入]![数量受入]
分納回数 [Forms]![F32仕入先受入]![分納回数]+1
抽出条件(手配番号) [Forms]![F32仕入先受入]![手配番号]

キャンセルボタンのマクロ設計

表示中のデータをすべてクリアするマクロで、登録完了後の自動リセットとしても使われています。

サブマクロ:キャンセル

サブマクロのテキスト表示
サブマクロ:キャンセル
値の代入
 アイテム = [Forms]![F32仕入先受入]![手配番号]
 式    = Null
値の代入
 アイテム = [Forms]![F32仕入先受入]![受入日]
 式    = Date()
値の代入
 アイテム = [Forms]![F32仕入先受入]![数量受入]
 式    = Null
値の代入
 アイテム = [Forms]![F32仕入先受入]![合否]
 式    = False
値の代入
 アイテム = [Forms]![F32仕入先受入]![未完分]
 式    = False
値の代入
 アイテム = [Forms]![F32仕入先受入]![備考]
 式    = Null
値の代入
 アイテム = [Forms]![F32仕入先受入]![分納残数]
 式    = Null
値の代入
 アイテム = [Forms]![F32仕入先受入]![分納回数]
 式    = Null
マクロの実行 (M32仕入先受入.受入表示,,)
再クエリ ()
コントロールの移動 (手配番号)
マクロの中止
サブマクロの最後

マクロの概要

項目 内容
目的 表示中のデータをすべてクリアし、次の入力に備える
実行タイミング キャンセルボタンクリック時、または登録完了直後
処理内容 全項目をNull(受入日はDate()に)クリア→受入表示実行→再クエリ→手配番号コントロールへ移動

マクロの設置場所

項目 内容
格納先 F32仕入先受入フォームの「キャンセル」ボタン
呼び出し元 ユーザーによるキャンセルボタンクリック、または登録マクロからの呼び出し

備考コントロールの更新後処理

備考欄に入力されたテキストを、更新後処理で自動的に半角へ統一しています。全角と半角が混在した状態での登録を防ぐための処理です。

サブマクロ:備考

サブマクロのテキスト表示
サブマクロ:備考
If IsNull([備考]) Then
 コントロールの移動 (登録)
 マクロの中止
Else
 値の代入
  アイテム = [備考]
  式    = StrConv([備考],8)
 コントロールの移動 (備考)
If 文の最後
マクロの中止
サブマクロの最後

マクロの概要

項目 内容
目的 入力された備考を半角に統一する
実行タイミング 備考コントロールの更新後
処理内容 備考が空なら登録ボタンへ移動/入力があれば半角変換して備考へ移動

マクロの設置場所

項目 内容
格納先 F32仕入先受入フォームの「備考」コントロール(更新後処理)
呼び出し元 ユーザーによる備考入力確定時

まとめ

仕入先受入登録ページは、成形課・加工課・印刷課で使い回す共通フォームでありながら、部署区分1つの値でタイトル表示を切り替えるシンプルな設計になっています。手配番号を直接知っている場合と、外注先からの納期回答一覧から選ぶ場合の2系統で対象データを特定できる点が最大の特徴で、後者は日付・仕入先の2条件絞り込みと適用フラグによる二重登録防止まで備えています。登録ボタンは必須項目のチェックから追加・分納更新までを一気に実行し、完了後は自動でキャンセルマクロが走って次の入力にすぐ移れる、現場の受入検査業務に寄り添った構成です。

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

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