私は業務効率化のために便利なエクセルツールを作成・活用していますが、最近“思わぬ落とし穴”に気づいたのです。
それは・・・
エクセルファイルの「閉じ忘れ」によって、他の人が開いた際に「読み取り専用」になってしまい、追記できなくなるという問題。
さらに驚くべき事実も判明しました。
なんと、エクセルを長時間開いたままにして、仕事をしているフリをする不届き者が現れたのです!
せっかく作った業務効率化ツールも、この状況を放置していては本来の効果を発揮できません。そこで私は、この問題をスマートに解決できる方法を考えました。
その答えが、「一定時間が経過したらエクセルを自動で閉じる」設定です。
本記事では、この設定方法を初心者にもわかりやすく解説していきます。
共有ファイルで起きる“読み取り専用”トラブルとは?
エクセルファイルは、クラウドや社内ネットワークフォルダなどの共有可能な場所に保存することで、アクセスを許可されたPCから編集できるようになります。
しかし、誰かがエクセルファイルを開いていると、他の人が同じファイルを開こうとしたときに「読み取り専用」と表示され、編集内容を保存することができない状態で開かれます。これが「読み取り専用」になります。
「読み取り専用」で開かれたファイルは入力も可能ですが、保存する際に「コピー+”ファイル名”」という名前になり上書きすることができません。
つまり、複数人で共有しているエクセルファイルを誰かが開いたままにしていると、「読み取り専用」となり編集ができず業務が滞るという訳です。

エクセル開きっぱなしにしてるのは誰だー!
ちょっと入力したいだけなのにー!!
エクセルを自動で閉じる!VBA設定の基本手順
エクセルを一定時間で自動的に閉じるには「VBA:Visual Basic for Applications」を使用します。
VBAは、Microsoftが開発したプログラミング言語「Visual Basic」をベースに、ExcelやWordなどのOfficeアプリケーション内で動作するように最適化された言語です。
VBAを使って「繰り返し作業の自動化」や「複雑な処理の簡略化」などのプログラム(マクロという)を作ることで、実にさまざまなことが可能となります。
【ファイルの保存形式を「xlsx」から「xlsm」へ変更】
マクロを使うためにはファイルの種類を「xlsm(:Excel マクロ有効ブック)」で保存する必要があります。
❖ エクセルファイルの種類をxlsmにする手順
- 使用するエクセルファイルが既にある場合は、そのファイルを開く。
- 「F12」キーを押して、「名前を付けて保存」のウィンドウを開く。
- ファイルの種類(T)から「Excel マクロ有効ブック」を選択して保存。


使用するファイルが新規作成(まだ保存したことがない状態)の場合、保存する時にファイルの種類(T)から「Excel マクロ有効ブック」を選択して保存しよう!
【開発タブの表示】
開発タブがない・表示方法がわからない方は下の記事を参考にしてください。
【エディター(VBE:Visual Basic Editor)を開く】
❖ エディターを開く手順
- 開発タブを選択
- Visual Basicを選択しBVEを開く。
(「Alt + F11」でもVBEを開けます。)

【ThisWorkbookへコードを入力】
❖ ThisWorkbookへコードを入力する手順
1.VBE(エディター)の左側にある「ThisWorkbook」を選択します。

2.ThisWorkbookの右側に表示されているウィンドウ(コードウィンドウ)に下のコードをコピー&ペイストします。
Private Sub Workbook_Open()
Application.OnTime Now + TimeValue(“00:10:00”), “AutoClose”
End Sub


(“00:10:00“)はそれぞれ(“時:分:秒“)に対応しているんだ。
設定は「エクセルファイルを開いて10分後に閉じる」だけど、閉じるまでの時間は数字を変更すれば任意で設定できるよ。
【標準モジュールの追加と補助コードの入力】
❖ 標準モジュールの追加と補助コードの入力手順
1.BVEの挿入タブから「標準モジュール(M)」を選択し、モジュールを追加します。

2.追加したモジュールが開いていることを確認し、補助コードを入力します。

3.コードウィンドウ(補助コードを入力する欄)に下のコードをコピー&ペイストします。
Sub AutoClose()
ThisWorkbook.Close SaveChanges:=True
End Sub


設定は「エクセルを保存して閉じる」だけど、
SaveChanges:=Trueを
SaveChanges:=False
にすると「エクセルを保存しないで閉じる」へ変更できるよ。
【応用編】非アクティブな場合のみ閉じる方法
ここまでは、エクセルファイルを開いてから一定時間経過後に自動で閉じる設定を行ってきましたが、「作業中なのに閉じられたら困る!」という場合もあることでしょう。
そこで、応用編として「ユーザーが操作していない(非アクティブ)時間を検知して閉じる」設定も解説していきます。
❖【ThisWorkbook】へ入力
Private Sub Workbook_Deactivate()
deactivateTime = Timer
If Not checkTimerScheduled Then
checkTimerScheduled = True
Application.OnTime Now + TimeValue(“00:00:30”), “CheckAutoClose”
End If
End Sub
Private Sub Workbook_Activate()
checkTimerScheduled = False
End Sub
❖【標準モジュール】へ入力
Public deactivateTime As Double
Public checkTimerScheduled As Boolean
Public Sub CheckAutoClose()
If Not ThisWorkbook.Windows(1).Visible Then Exit Sub
If Not checkTimerScheduled Then Exit Sub
If Timer – deactivateTime >= 60 Then
ThisWorkbook.Save
Application.Quit
Else
Application.OnTime Now + TimeValue(“00:00:30”), “CheckAutoClose”
End If
End Sub

この設定は・・・
- 「設定を行ったエクセルファイルが非アクティブ」(他のエクセルファイルを使用中)であることを30秒ごとに自動でチェック。
- 非アクティブ状態が確認されると、1分後に「設定を行ったエクセルファイルを保存して閉じる」設定となっています。
まとめ|VBAで業務効率化!自動終了でトラブル防止
エクセルを閉じ忘れて「読み取り専用」になる問題は、共有ファイルを使用すると誰もが一度は経験するストレスです。でも、マクロを使えば、そんな悩みもスマートに回避できます。
- 読み取り専用トラブルは意外と簡単に回避できる
- VBAを活用すれば放置対策としてファイル自動終了が可能
- 初心者でも安心して導入できるシンプルコード
- 応用編でさらに安全性・効率性をアップ
「うちの職場にも導入したい!」と思った方は、ぜひこの設定を試してみてくださいね。
コメント