VBA

【ExcelVBA】指定日時以外の実行を禁止するマクロ ~残業させないぞ①~

定時外の実行を禁止するマクロ
上司
上司
もりさん、聞いておくれ

部下Aの残業が多いって人事部から怒られてしまったよ

もり
もり
ええ?Aさん、そんなに仕事抱えてましたっけ?
上司
上司
いいや、残業代目当ての「生活残業」ってやつだよ。ワシが帰った後にこそこそ会社に残ってるらしい
もり
もり
なるほど…強制的に帰らせる仕組みが必要そうですね

指定の日時以外は実行できないマクロの作り方を紹介します。

マクロ実行時に「今日の曜日」「現在時刻」を取得して、指定条件の場合は強制終了させます。

指定の日時以外の実行を禁止するマクロ

会社の「定時」時間内のみ、動作するマクロを作ります。

「下記条件に合致しない場合はマクロを強制終了する」という仕組みです。

  • 月曜日~金曜日
  • 9時~18時
もり
もり
それじゃあ作っていくよー!

①今日の曜日を取得する

Weekday関数とDate関数を組み合わせて、マクロ実行時の「曜日」を取得します。

Weekday関数とは
→指定日付の「曜日」を返す関数

使い方:Weekday(日付)
戻り値: 1 (日曜) ~ 7 (土曜) の値

Weekday関数の戻り値の一覧です

定数 曜日
vbSunday 1 日曜日
vbMonday 2 月曜日
vbTuesday 3 火曜日
vbWednesday 4 水曜日
vbThursday 5 木曜日
vbFriday 6 金曜日
vbSaturday 7 土曜日

Date関数とは
→システム日付(通常は当日の日付)を返す関数

 

これら2つの関数を組み合わせて、「今日の曜日」を取得します。

②現在時刻を取得する

Time関数を使用して、マクロ実行時の「現在時刻」を取得します。

Time関数とは
→システム時刻(通常は現在時刻)を返す関数

Time関数の戻り値を変数に格納します。

③始業時刻と終業時刻を設定する

基準となる2つの時刻を変数に格納します。時:分:秒を指定します。

④条件を組み合わせてコードを作る

ここまでで「今日の曜日」「現在時刻」を取得できました。これらと「マクロを停止する条件」を組み合わせます。

下記4つのいずれかに合致する場合、Endステートメントでマクロを強制終了します。

  1. 「現在時刻」が始業時刻より前
  2. 「現在時刻」が終業時刻より後
  3. 「今日の曜日」が土曜日
  4. 「今日の曜日」が日曜日

 

もり
もり
このプロシージャをマクロの先頭に仕込んでおけばOK!定時外は動作しないよ!

 

⑤残業したい部下、マクロを使えない

残業したい部下
残業したい部下
よーし、うざい上司も帰ったし、今日も残業するぞ~

残念!定時外に実行しても、強制終了されてしまいますよ。

 

残業したい部下
残業したい部下
ぐぬっ!なんだこれは!使えないじゃないか・・・
もり
もり
やった!大成功だね

 

残業したい部下
残業したい部下
・・・。マクロが動かないなら手作業でやればいいな

おっ、ますます残業代稼げちゃうぞ(ぐふふ)

もり
もり
コラーっ!早く帰りなさーい!

そのExcelブック、いっそ開かないようにしちゃうわよ!

(次回へ続く→)【ExcelVBA】指定日時以外は開けないブック ~残業させないぞ②~