M99共通マクロの解説

フォームごとに同じ処理のマクロを個別に作ると、マクロの数が際限なく増えて管理が大変になります。M99共通マクロはどのフォームでも使い回せる処理をサブマクロとして一箇所に集約したものです。コントロール名を統一しておくことでフォームを問わず同じマクロが機能し、修正が必要になった場合も一箇所直すだけで全体に反映されます。オブジェクトを限定しない命令を格納する設計が乱立防止の核心です。


収録サブマクロ一覧

M99共通マクロに収録しているサブマクロの全体像です。このページで解説するものとテキスト補足にとどめるものを合わせて掲載しています。

M99共通 マクロ一覧(一部)

グループ サブマクロ名 概要
基本操作 閉じる カレントフォームを閉じる
基本操作 閉じる再クエリ フォームを閉じて呼び出し元を再クエリ
基本操作 再クエリ フォーム内の全クエリを一括更新
基本操作 コンボ再検索 検索コンボボックスをクリアして再クエリ
入力補正 備考・メモ 全角入力を半角に統一(StrConv)
入力補正 手配番号・図番・品名・機械番号・電話番号・携帯電話・フリガナ・内容・会社名・連絡先・概要 同上
並び替え 取引先名昇順・取引先名降順・図番昇順・図番降順 サブフォームの並び替え
表示補助 行色・行色図番 カレント行の背景色変更
日付単日 今日・前日・翌日・明日 日付コントロールの単日操作
日付週単位 今週・前週・翌週 いつから・いつまでを週単位で操作
日付月単位 今月・前月・翌月 いつから・いつまでを月単位で操作
日付年単位 今年・前年・翌年 いつから・いつまでを年単位で操作
日付期間 2年間・3年間・4年間・5年間 複数年にまたがる期間指定

基本操作系

閉じる・閉じる再クエリ

フォームを閉じるだけでよい場合と、閉じた後に呼び出し元フォームを最新状態に更新したい場合で使い分けます。

サブマクロ:閉じる

フォームを閉じるだけのシンプルな構成です。

サブマクロのテキスト表示
サブマクロ:閉じる

  ウィンドウを閉じる
    オブジェクトの種類  (指定なし)
    オブジェクト名    (指定なし)
    オブジェクトの保存  確認

  マクロの中止
サブマクロの最後

オブジェクトの種類・オブジェクト名を指定せずにウィンドウを閉じるため、どのフォームのボタンに設置してもカレントフォームを閉じます。

マクロの解説

処理 内容
ウィンドウを閉じる オブジェクト名を指定しないことでカレントフォームを閉じる

マクロの設置場所

閉じるボタンのクリック時にマクロを設置します。

項目 内容
コントロール 閉じるボタン
イベント クリック時
呼び出し元 M99共通 > サブマクロ:閉じる

サブマクロ:閉じる再クエリ

フォームを閉じた後に呼び出し元フォームの表示を最新状態に更新します。

サブマクロのテキスト表示
サブマクロ:閉じる再クエリ

  ウィンドウを閉じる
    オブジェクトの種類  (指定なし)
    オブジェクト名    (指定なし)
    オブジェクトの保存  確認

  コントロールの移動
    コントロール名  閉じる

  再クエリ
    コントロール名  (指定なし)

  マクロの中止
サブマクロの最後

詳細フォームや編集フォームで更新・追加を行った後に閉じると、呼び出し元のリストフォームが古い表示のままになることがあります。閉じる再クエリはフォームを閉じてから「閉じる」コントロールにフォーカスを移動し再クエリを実行することで呼び出し元を自動的に最新状態に更新します。

マクロの解説

処理 内容
ウィンドウを閉じる カレントフォームを閉じる
コントロールの移動 呼び出し元フォームの閉じるコントロールにフォーカスを移動
再クエリ 呼び出し元フォームの全クエリを更新して最新状態に

マクロの設置場所

閉じるボタンのクリック時にマクロを設置します。

項目 内容
コントロール 閉じるボタン
イベント クリック時
呼び出し元 M99共通 > サブマクロ:閉じる再クエリ

コンボ再検索

検索コンボボックスをNullにクリアして再クエリを実行します。コントロール名を「検索」に統一しておくことでどのフォームでも使い回せます。詳細な解説は従業員リストページをご参照ください。

サブマクロ:コンボ再検索実装事例

実装事例

検索窓(コンボボックス)の再検索ボタン

検索のコンボボックス横には再検索のボタンを設置します。多くのフォームに設置するためマクロは共通化して共通活用します。
・各フォームの検索コンボボックスの名前は必ず「検索」にします


入力補正系

備考・その他フィールド

入力時に全角で打たれた数字・カタカナ・記号を半角に統一するマクロです。フィールドの更新後処理に設置します。

サブマクロ:備考

備考フィールドの更新後処理に設定するマクロです。

サブマクロのテキスト表示
サブマクロ:備考

  値の代入
    アイテム  = [備考]
    式      = StrConv([備考],8)

  マクロの中止
サブマクロの最後

StrConv([備考],8) で全角文字を半角に統一します。備考欄は数字・カタカナ・英字が混在しやすいため統一しておくと検索精度が上がります。

マクロの解説

処理 内容
StrConv( ,8) 全角文字を半角に変換

マクロの設置場所

備考フィールドの更新後処理にマクロを設置します。

項目 内容
コントロール 備考(テキストボックス)
イベント 更新後処理
呼び出し元 M99共通 > サブマクロ:備考

同じ構成のサブマクロ一覧

以下のフィールドも同じ構成でアイテム名だけ変えて設置しています。

サブマクロ名 アイテム 目的
メモ [メモ] メモ欄の半角統一
手配番号 [手配番号] 手配番号の半角統一
図番 [図番] 製品図番の半角統一
品名 [品名] 品名の半角統一
機械番号 [機械番号] 機械番号の半角統一
電話番号 [電話番号] 電話番号の半角統一
携帯電話 [携帯電話] 携帯番号の半角統一
フリガナ [フリガナ] フリガナの半角統一
内容 [内容] 内容欄の半角統一
会社名 [会社名] 会社名の半角統一
連絡先 [連絡先] 連絡先の半角統一
概要 [概要] 概要欄の半角統一

並び替え系

取引先名昇順・降順

サブフォームの表示順を略称フィールドで昇順・降順に切り替えます。
表形式のサブフォームに実装します。取引先名(略称)で表示されているデータを並び替えします。サブマクロはフォームに設置した▲▼ボタンに実装します。

実装したフォーム例

サブマクロ:取引先名昇順

サブマクロのテキスト表示
サブマクロ:取引先名昇順

  並べ替えの設定
    並べ替え  [略称]
    コントロール名  (指定なし)

  マクロの中止
サブマクロの最後

サブマクロ:取引先名降順

サブマクロのテキスト表示
サブマクロ:取引先名降順

  並べ替えの設定
    並べ替え  [略称] DESC
    コントロール名  (指定なし)

  マクロの中止
サブマクロの最後

マクロの解説

サブマクロ 並べ替え設定 内容
取引先名昇順 [略称] 略称のA→Z・あ→ん順
取引先名降順 [略称] DESC 略称のZ→A・ん→あ順

マクロの設置場所

昇順・降順ボタンのクリック時にマクロを設置します。

項目 内容
コントロール 昇順ボタン・降順ボタン
イベント クリック時
呼び出し元 M99共通 > サブマクロ:取引先名昇順 / 取引先名降順

日付・期間系

設計思想

日報・受注・売上など期間を指定して検索する場面では「いつから」「いつまで」という2つのコントロール名を統一しています。このコントロール名が統一されているからこそ今日・前日・今週・今月・2年間などのボタンをM99共通マクロとして使い回せます。フォームに新しく検索機能を追加する際もボタンを置いてマクロを設定するだけで即座に動作します。

また週単位・月単位のボタンを同時に操作すると日付がずれる問題を防ぐため、今週ボタンを押すと月単位ボタンが無効になり、今月ボタンを押すと週単位ボタンが無効になる仕組みを組み込んでいます。

日付系ボタン設置例


今日

日付コントロールに本日の日付をセットします。

サブマクロ:今日

サブマクロのテキスト表示
サブマクロ:今日

  値の代入
    アイテム  = [日付]
    式      = Date()

  再クエリ
    コントロール名  (指定なし)

  マクロの中止
サブマクロの最後

Date() 関数で本日の日付を日付コントロールに代入します。再クエリでリストを即時更新します。

マクロの解説

処理 内容
Date() 本日の日付を返す

マクロの設置場所

今日ボタンのクリック時にマクロを設置します。

項目 内容
コントロール 今日ボタン
イベント クリック時
呼び出し元 M99共通 > サブマクロ:今日

前日・翌日

日付コントロールの値を1日前・1日後に移動します。日付が未入力の場合はメッセージを表示して中止します。

サブマクロ:前日

サブマクロのテキスト表示
サブマクロ:前日

  If  IsNull([日付])  Then
    メッセージボックス
      メッセージ      日付を選択してから 前日ボタンは有効になります
      警告音        はい
      メッセージの種類  警告
      メッセージタイトル  無効
    コントロールの移動(日付)
    マクロの中止

  Else
    値の代入
      アイテム  = [日付]
      式      = [日付]-1
    再クエリ()
    マクロの中止
  If文の最後

サブマクロの最後

日付コントロールがNullの場合は「日付を選択してから前日ボタンは有効になります」とメッセージを表示してフォーカスを日付コントロールに移動します。日付が入力済の場合は [日付]-1 で1日前の日付に更新します。

サブマクロ:翌日

サブマクロのテキスト表示
サブマクロ:翌日

  If  IsNull([日付])  Then
    メッセージボックス
      メッセージ      日付を選択してから 翌日ボタンは有効になります
      警告音        はい
      メッセージの種類  警告
      メッセージタイトル  無効
    コントロールの移動(日付)
    マクロの中止

  Else
    値の代入
      アイテム  = [日付]
      式      = [日付]+1
    再クエリ()
    マクロの中止
  If文の最後

サブマクロの最後

前日と同じ構成で [日付]+1 で1日後に更新します。

マクロの解説

サブマクロ 内容
前日 [日付]-1 日付を1日前に移動
翌日 [日付]+1 日付を1日後に移動

マクロの設置場所

前日・翌日ボタンのクリック時にマクロを設置します。

項目 内容
コントロール 前日ボタン・翌日ボタン
イベント クリック時
呼び出し元 M99共通 > サブマクロ:前日 / 翌日

今週

いつから・いつまでを今週の月曜日〜日曜日にセットします。同時に月単位ボタンを無効にして週単位ボタンを有効にします。

サブマクロ:今週

サブマクロのテキスト表示
サブマクロ:今週

  値の代入
    アイテム  = [いつから]
    式      = Date()-Weekday(Date(),3)

  値の代入
    アイテム  = [いつまで]
    式      = [いつから]+6

  値の代入([前月].[Enabled] = False)
  値の代入([翌月].[Enabled] = False)
  値の代入([前週].[Enabled] = True)
  値の代入([翌週].[Enabled] = True)

  再クエリ()
  マクロの中止
サブマクロの最後

Date()-Weekday(Date(),3) で今週の月曜日を計算し、いつからにセットします。いつまではいつから+6で日曜日になります。月単位ボタン(前月・翌月)を Enabled=False で無効にし、週単位ボタン(前週・翌週)を Enabled=True で有効にします。

マクロの解説

処理 内容
Date()-Weekday(Date(),3) 今週の月曜日を計算
[いつから]+6 月曜日から6日後=日曜日
前月・翌月 Enabled=False 月単位ボタンを無効化
前週・翌週 Enabled=True 週単位ボタンを有効化

前週・翌週

今週と同じ構成でいつから・いつまでをそれぞれ±7します。ボタンの有効・無効は今週と同じ設定です。

サブマクロ いつから いつまで
前週 [いつから]-7 [いつまで]-7
翌週 [いつから]+7 [いつまで]+7

マクロの設置場所

今週・前週・翌週ボタンのクリック時にマクロを設置します。

項目 内容
コントロール 今週・前週・翌週ボタン
イベント クリック時
呼び出し元 M99共通 > サブマクロ:今週 / 前週 / 翌週

今月

いつから・いつまでを今月の1日〜末日にセットします。同時に週単位ボタンを無効にして月単位ボタンを有効にします。

サブマクロ:今月

サブマクロのテキスト表示
サブマクロ:今月

  値の代入
    アイテム  = [いつから]
    式      = DateSerial(Year(Date()),Month(Date()),1)

  値の代入
    アイテム  = [いつまで]
    式      = DateSerial(Year(Date()),Month(Date())+1,0)

  値の代入([前月].[Enabled] = True)
  値の代入([翌月].[Enabled] = True)
  値の代入([前週].[Enabled] = False)
  値の代入([翌週].[Enabled] = False)

  再クエリ()
  マクロの中止
サブマクロの最後

DateSerial(Year(Date()),Month(Date()),1) で今月1日を計算しいつからにセットします。いつまでは DateSerial(Year(Date()),Month(Date())+1,0) で翌月の0日=今月末日になります。週単位ボタンを無効・月単位ボタンを有効にします。

マクロの解説

処理 内容
DateSerial(Year(Date()),Month(Date()),1) 今月1日を計算
DateSerial(Year(Date()),Month(Date())+1,0) 翌月の0日=今月末日を計算
前月・翌月 Enabled=True 月単位ボタンを有効化
前週・翌週 Enabled=False 週単位ボタンを無効化

前月

いつから・いつまでを前月の1日〜末日に移動します。

サブマクロ:前月

サブマクロのテキスト表示
サブマクロ:前月

  値の代入
    アイテム  = [いつから]
    式      = DateSerial(Year([いつから]),Month([いつまで])-1,1)

  値の代入
    アイテム  = [いつまで]
    式      = DateSerial(Year([いつから]),Month([いつから])+1,0)

  再クエリ()
  マクロの中止
サブマクロの最後

DateSerial で現在のいつからの年月から1ヶ月前を計算します。いつまでの月に+1して0日を指定することで月末日を自動取得します。

マクロの解説

処理 内容
Month([いつまで])-1,1 前月の1日を計算
Month([いつから])+1,0 翌月の0日=前月末日を計算

翌月

前月と対称の構造です。Month([いつまで])+1,1 で翌月1日、Month([いつから])+2,0 で翌月末日を計算します。

マクロの設置場所

前月・翌月ボタンのクリック時にマクロを設置します。

項目 内容
コントロール 前月ボタン・翌月ボタン
イベント クリック時
呼び出し元 M99共通 > サブマクロ:前月 / 翌月

今年

いつから・いつまでを今年の1月1日〜12月31日にセットします。

サブマクロ:今年

サブマクロのテキスト表示
サブマクロ:今年

  値の代入
    アイテム  = [いつから]
    式      = DateSerial(Year(Date()),1,1)

  値の代入
    アイテム  = [いつまで]
    式      = DateSerial(Year(Date()),12,31)

  再クエリ()
  マクロの中止
サブマクロの最後

DateSerial(Year(Date()),1,1) で今年の1月1日、DateSerial(Year(Date()),12,31) で12月31日を計算します。

マクロの解説

処理 内容
DateSerial(Year(Date()),1,1) 今年の1月1日
DateSerial(Year(Date()),12,31) 今年の12月31日

前年

いつから・いつまでを前年の1月1日〜12月31日に移動します。

サブマクロ:前年

サブマクロのテキスト表示
サブマクロ:前年

  値の代入
    アイテム  = [いつから]
    式      = DateSerial(Year([いつから])-1,1,1)

  値の代入
    アイテム  = [いつまで]
    式      = DateSerial(Year([いつまで])-1,12,31)

  再クエリ()
  マクロの中止
サブマクロの最後

DateSerial(Year([いつから])-1,1,1) で前年1月1日、DateSerial(Year([いつまで])-1,12,31) で前年12月31日を計算します。

翌年

前年と対称の構造です。Year([いつから])+1・Year([いつまで])+1で翌年を計算します。

マクロの設置場所

前年・翌年ボタンのクリック時にマクロを設置します。

項目 内容
コントロール 前年ボタン・翌年ボタン
イベント クリック時
呼び出し元 M99共通 > サブマクロ:前年 / 翌年

2年間・3年間

今年を起点に複数年にまたがる期間を一括でセットします。売上推移や受注履歴など年度をまたぐ分析に使います。

サブマクロ:2年間

サブマクロのテキスト表示
サブマクロ:2年間

  値の代入
    アイテム  = [いつから]
    式      = DateSerial(Year(Date()),1,1)

  値の代入
    アイテム  = [いつまで]
    式      = DateSerial(Year(Date()),12,31)

  値の代入
    アイテム  = [いつから]
    式      = DateSerial(Year([いつから])-1,1,1)

  再クエリ()
  マクロの中止
サブマクロの最後

まず今年の1月1日・12月31日をセットしてからいつからを1年前に移動することで前年1月1日〜今年12月31日の2年間を設定します。

サブマクロ:3年間

サブマクロのテキスト表示
サブマクロ:3年間

  値の代入
    アイテム  = [いつから]
    式      = DateSerial(Year(Date()),1,1)

  値の代入
    アイテム  = [いつまで]
    式      = DateSerial(Year(Date()),12,31)

  値の代入
    アイテム  = [いつから]
    式      = DateSerial(Year([いつから])-2,1,1)

  再クエリ()
  マクロの中止
サブマクロの最後

2年間と同じ構成でいつからを2年前に移動します。

マクロの解説

サブマクロ いつから いつまで 期間
2年間 Year([いつから])-1年の1月1日 今年12月31日 前年〜今年
3年間 Year([いつから])-2年の1月1日 今年12月31日 2年前〜今年
4年間 Year([いつから])-3年の1月1日 今年12月31日 3年前〜今年
5年間 Year([いつから])-4年の1月1日 今年12月31日 4年前〜今年

マクロの設置場所

2年間〜5年間ボタンのクリック時にマクロを設置します。

項目 内容
コントロール 2年間・3年間・4年間・5年間ボタン
イベント クリック時
呼び出し元 M99共通 > サブマクロ:2年間 / 3年間 / 4年間 / 5年間

まとめ

M99共通マクロはコントロール名の統一を前提に設計したフォーム共通の処理ライブラリです。フォームを閉じる・検索をリセットする・日付を操作するといった頻出処理を一箇所に集約することでマクロの乱立を防ぎ、修正が必要になった場合も一箇所直すだけで全体に反映されます。新しいフォームを作る際もM99共通のサブマクロをそのまま設置するだけで動作するため、開発スピードが大幅に上がります。コントロール名の命名ルールとセットで運用することで真価を発揮する設計です。

 

 

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

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