こんにちは、masaです。
もう少ししたら自分で作ったExcelファイルを他の人に編集してもらって、再度自分がそのファイルを編集する機会があります。しかも30人超えの人に。
なので、極力入力ミスしないで欲しい。引いては自分の作業を楽にしたいということで『起動時もしくは終了時に自動的にマクロを起動させる方法』を学び、まとめました。
自分の場合は、念には念を入れて起動時も、終了時も自動的にマクロを起動させるように設定しました。
ただし、使う人がうざったくないように条件を満足(=入力して欲しいところが入力してくれていれば)してくれていれば、その後は一切起動できない仕組みを取り入れています。
- 前提として整えるべき条件について
- 活用例1.ファイル起動時に一番左のシートのセル:A1にジャンプするマクロ
- 活用例2.ファイルを閉じる時に一番左のシートのセル:A1にジャンプするマクロ
- 活用例3.ファイル起動時に指定のセルが未入力であれば、注意喚起としてマクロを起動するマクロ
- 活用例4.ファイル終了時に指定のセルが未入力であれば、注意喚起としてマクロを起動するマクロ
- 番外編:ファイル終了時に上書き保存するマクロ
- おわりに
前提として整えるべき条件について
前提として整えるべき条件が3つあり、以下のとおりです。
- コードはThisWorkbookに記述する。
- 左のリストボックスからWorkbookを選択する。
- 右のリストボックスからOpen(起動時)あるいはBeforeClose(終了時)のいずれかを選択する。
上記の前提条件を守らなければ機能しないのでご注意ください。
▽起動時の設定状況です。
▼終了時の設定状況です。
活用例1.ファイル起動時に一番左のシートのセル:A1にジャンプするマクロ
他の人に渡すファイルを説明することを想定し起動したファイルのセルの場所を統一するために『ファイル起動時に一番左のシートのセル:A1にジャンプするマクロ』を作りました。
絶対最初に入力して欲しいセルがあるときはA1を打ち換えたりするのも使いどころがありそうですよね。
Private Sub Workbook_Open()
Sheet1.Select
'Sheet1は一番左のシートを表します。
Range("A1").Select
End Sub
活用例2.ファイルを閉じる時に一番左のシートのセル:A1にジャンプするマクロ
僕の場合は30人越えの人からファイルが戻ってくるので、30通りの終わったところから再編集することになりかねないので、それは無駄に思考と時間を消耗しかねないので、保険をかける意味で起動時にプラスして、終了時にも同じ機能を持つマクロを作成しました。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Sheet1.Select
'Sheet1は一番左のシートを表します。
Range("A1").Select
End Sub
活用例3.ファイル起動時に指定のセルが未入力であれば、注意喚起としてマクロを起動するマクロ
一番最初に必ず入力して欲しい情報があるので、ファイルを起動した瞬間に注意喚起としてマクロを起動するマクロを作りました。
そうすることで入力漏れを防げると考えました。
また、そのマクロで起動されるのはユーザーフォームとなっていて誤入力を避けるように設計しています。
このExcelはおそらく複数回起動されるので、起動の都度、このマクロが起動されるのはうざったいので、入力して欲しいセルが未入力の場合のみ起動する設計しました。
逆に常にマクロを起動したい場合はIF~End Ifを削除すればOKです。
Private Sub Workbook_Open()
Sheets("「シート名を入力」").Select
If Range("C43") = "" Then
会社選択.Show (vbModeless)
'Then以降End Ifまでに起動したいマクロを挿入する
End If
End Sub
活用例4.ファイル終了時に指定のセルが未入力であれば、注意喚起としてマクロを起動するマクロ
活用例3.と同様にやはり必ず入力していて欲しい情報なので、ファイル終了時に指定のセルが未入力の場合も再度、注意喚起としてマクロを起動するマクロを作成しました。
活用例3.と同様に、このExcelはおそらく複数回起動され、閉じると思うので、閉じる都度、このマクロが起動されるのはうざったいので、入力して欲しいセルが未入力の場合のみ起動する設計しました。
逆に常にマクロを起動したい場合はIF~End Ifを削除すればOKです。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Sheets("「シート名を入力」").Select
If Range("C43") = "" Then
会社選択.Show (vbModeless)
'Then以降End Ifまでに起動したいマクロを挿入する
End If
End Sub
番外編:ファイル終了時に上書き保存するマクロ
今回の僕のミッションにはあまり関係ないのですが、思いついたので書いておきます。
超重要書類など場合によっては閉じる時に常に上書き保存してから閉じるマクロがあったら便利だろうなと思い作りました。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Workbooks("ファイル名").Save
End Sub
おわりに
覚えておけば、理解しておけばそれなりに使用することがある機能のように感じています。応用の仕様はいろいろあると思うのですが、起動時、終了時の整えるべき条件の設定をお忘れなく!
▽起動時の設定状況です。
▼終了時の設定状況です。