エクセルを自動で閉じるVBAの導入方法【 複数の人が扱うエクセルへの設定がおすすめ 】

Left Caption

疑問がある人

エクセルを開きっぱなしにされると「読み取り専用」になって不便だなぁ。。自動でエクセルファイルを閉じるVBAを設定したい。

こんな要望にお応えします。

この記事では、時間が経過するとエクセルを自動で閉じるVBAの作り方と導入方法について詳しく解説しています。

職場にはみんなが扱うことができる共有のエクセルファイルがあり、1つのエクセルファイルを複数の人が同時に開こうとすると「読み取り専用」になってしまいます。ある人が編集中のエクセルを閉じ忘れると、いつまでたってもそのエクセルを編集できない!という問題が発生してしまいます。

制限時間でエクセルファイルを閉じるVBAを設定すれば、上記のような問題を解消することができます。複数の人が1つのエクセルファイルを編集する可能性がある方にとってもおすすめのVBAなので、是非設定して利用してみてください。

 

下記のサイトではこの記事で紹介している「時間が経過するとエクセルが自動で閉じるVBA」をダウンロードすることができます。

 

<<時間が経過するとエクセルが自動で閉じるVBAのダウンロードはこちら

 

広告

時間が経過するとエクセルを自動で閉じるVBAとは

時間が経過するとエクセルを自動で閉じるVBAとはどういうものか、下記の動画で紹介しています。

 

VBAは下記のような流れで実行されていきます。

  1. エクセルを開いたときに制限時間のカウントダウンがスタート
  2. 残り時間がわかるようにカウントダウンタイマーを表示
  3. 制限時間の設定は簡単に変更可能に
  4. カウントダウンタイマーに一時停止機能を搭載
  5. タイマーがゼロになると「上書き保存」をして閉じる

制限時間を設定するVBA、カウントダウンタイマーを表示するVBAなどが導入されていて難しい!と感じるかもしれませんが、VBAを一つ一つ分けて考えてみるとさほど難しいVBAは使われていません。

下記で紹介しているVBAの導入方法では、一つ一つのVBAを詳しく解説しているので是非参考にしてみてください。

 

 

時間が経過するとエクセルが自動で閉じるVBAの導入方法

 

1.様式を作成する

 

  • A4セル・・・「時」
  • C4セル・・・「分」
  • E4セル・・・「秒」

 

入力する数字を変更すると、エクセルを閉じるまでの制限時間が変更されます。

 

2.VBAを起動

 

3.標準無ジュールを作成

 

4.標準無ジュールにVBAを記入

5.サンプルVBA

サンプルVBA①

1 Sub Timer()
2 Dim L As Date, cnt As Double
3 L = DateAdd(“h", Range(“A4"), Time)
4 L = DateAdd(“n", Range(“C4"), L)
5 L = DateAdd(“s", Range(“E4"), L)
6 rng = 0
7 UserForm1.Show vbModeless
8 Do
9 cnt = DateDiff(“s", Time, L) + rng
10 UserForm1.TextBox1 = Format(TimeSerial(0, 0, cnt), “hh:nn:ss")
11 If UserForm1.TextBox1 = “00:00:00" Then Exit Do
12 DoEvents
13 Loop
14 Call CloseMe
15 End Sub

サンプルVBA②

1 Sub CloseMe()
2 ActiveWorkbook.Save
3 ThisWorkbook.Saved = True
4 If Workbooks.Count <= 1 Then
5 Application.Quit
6 Else
7 ThisWorkbook.Close False
8 End If
9 End Sub

 

 

6.sheet1にVBAを記入

7.サンプルVBA

サンプルVBA③

1 Private Sub WorkSheet_Activate()
2 UserForm1.Show vbModeless
3 End Sub

 

8.ユーザーフォームの作成

 

9.ユーザーフォームにVBAを記入

 

10.サンプルVBA

サンプルVBA④

1 Private Sub CommandButton1_Click()
2 Dim rng_t As Date
3 rng_t = Time
4 MsgBox (“タイマーがストップされました" & vbCrLf & “再開するには「OK」を押してください")
5 rng = rng + DateDiff(“s", rng_t, Time)
6 End Sub

 

 

11.ユーザーフォームの表示設定

 

 

12.ワークブックにVBAを記入

 

7.サンプルVBA

サンプルVAB⑤

1 Private Sub Workbook_Open()
2 Call Timer
3 End Sub

 

12.VBAの実行

以上でVBAの導入が完了します。

ユーザーフォームの設定など難しい手順もありますが、上記で紹介している順番に操作すれば設定できるはずです。是非挑戦してみてください。

 

時間が経過するとエクセルが自動で閉じるVBAの運用方法

時間が経過するとエクセルが自動で閉じるVBAは複数の人が扱うエクセルへの導入がおすすめです。エクセルの閉じ忘れで「読み取り専用」になってしまうという問題を解消することができます。

ただし、強制的にエクセルを閉じることになるので運用には注意が必要です。以下の項目をしっかり守ることでトラブルを発生させることなく運用することがきるはずです。

 

  • 時間設定を長くして編集している最中にエクセルが閉じない設定にすること
  • 上書保存してからエクセルを閉じること
  • 自動でエクセルが閉じることを職場の全員が理解すること
Left Caption

ひらめく人

VBAを導入するまえに職場全体にVBAがどのような処理をするのか説明しておくといいでしょう

 

Right Caption

悩んでる人

プログラムの内容よりもVBAをどのように運用すればいいのかを決める方が遥かに大変。。

私が勤めていた会社は、独自のネットワーク回線を持っていて共有のサーバーにあるエクセルファイルを地方にいる社員も操作することができる!という環境でした。そのため地方の人がエクセルを開きっぱなしで外出してしまった場合、そのエクセルファイルを開くとずっと「読み取り専用」となり編集することができない!という問題がありました。

地方の人が操作する頻度が高いエクセルに「時間が経過するとエクセルが自動で閉じるVBA」を設定することで問題を解消することができました。運用には注意が必要なVBAですが、とても便利なVBAであることは間違いないので気になる方は上手に使ってみてください。

 

自動で閉じるVBAに使われているプログラム解説

時間が経過するとエクセルが自動で閉じるVBAには大きくわけて以下のVBAが設定されています。

 

  • エクセルを開くとVBAが実行させる
  • 制限時間を決めるVBA
  • カウントダウンタイマーを表示させるVBA
  • 上書き保存してエクセルを閉じるVBA

各項目ごとにどのようにVBAを作成すればいいのか解説していきます。

 

エクセルを開くとVBAが実行させる

エクセルを開いたときにVBAを実行させるには、「Workbook_Open」を使用します。

上記サンプルVBA⑤で「Workbook_Open」が利用されているので確認してみてください。

 

 

「Workbook_Open」の他に、「Auto_Open」でもエクセルを開いたときにVBAを実行させることができます。

 

似たようなVBAですが、Auto_Openの処理よりもWorkbook_Openの方が優先されるようです。

 

Left Caption

ひらめく人

今回は「Workbook_Open」を利用していますが、Auto_Openでも作れると思います。

 

制限時間を決めるVBA

制限時間を決めるVBAには、時間に関するVBAが使われています。

 

  • TimeSerial関数
  • DateAdd関数
  • DateDiff関数

3つのタイマーを組み合わせることでカウントダウンタイマーを作り出しています。

 

TimeSerial関数

引数で指定した(時 , 分 , 秒 )値を返すもの

 

基本構造

 

TimeSerial( 時 , 分 , 秒 )

 

0~23の数値を指定
0~59の数値を指定
0~59の数値を指定

戻り値は日付型(Date)の宣言になります。

 

Left Caption

ひらめく人

今回のVBAではカウントダウンタイマーの時間表示にTimeSerial関数を利用しています。

 

TimeSerial関数のサンプル

使用例 結果
Cells(1,1) = TimeSerial(0,0,1) 12:00:01 AM
Cells(1,1) = TimeSerial(23,59,59) 11:59:59 PM
Cells(1,1) = TimeSerial(24,60,60) 1900/1/1 1:01:00

TimeSerial関数を使ってセルに時刻を入力してみると、入力値によって書式設定が変わることがわかりました。

 

上記サンプルの1つ目と2つ目の書式設定は「h:mm:ss AM/PM

上記サンプルの3つ目の書式設定は「yyyy/m/d h:mm

 

Left Caption

ひらめく人

TimeSerial関数を使って数値を入力するときは注意してください。

 

Dateadd関数

Dateadd関数は日付を計算するときに使用される関数です。例えば、「今から1時間後の日付をA1セルに表示させる」「今からA1セルに記入された時間を加えた日付を表示させる」という使い方ができます。

 

基本構造

 

Dateadd( 単位 , 数量 , 基準時間 )

 

DateDiff関数

DateDiff関数は日付を計算するときに使用される関数です。例えば、「今から1時間前の日付をA1セルに表示させる」「今からA1セルに記入された時間を引いた日付を表示させる」という使い方ができます。

基本構造

 

DateDiff( 単位 , 数量 , 基準時間 )

Left Caption

ひらめく人

Dateadd関数とDateDiff関数の使い方はほとんど一緒です。時間を加えるか、引くかの違いだけです。

 

カウントダウンタイマーを表示させるVBA

カウントダウンタイマーは、ユーザーフォームと3つの関数を組み合わせることで作ることができます。カウントダウンタイマーを表示させるVBAは以下のようになります。

 

カウントダウンタイマーを表示させるVBA

 

cnt = DateDiff(“s", Time, L) + rng

UserForm1.TextBox1 = Format(TimeSerial(0, 0, cnt), “hh:nn:ss")

上記のカウントダウンタイマーを表示させるVBAの意味は以下のようになります。

カウントダウンタイマーを表示させるVBAの意味

 

変数cntに、値(時間を1秒ずつ減らしていく)をいれる
関数TimeSerialに変数cntを入れ、取得した時間を関数Formatで文字列に変換し、テキストボックス(ユーザーフォーム)で表示させる

 

カウントダウンタイマーを表示させるVBAのメインとなる関数がFormat関数です。

基本構造

 

Format( 指定した値 , “指定した書式" )

指定した書式一覧

指定した書式 意味 結果
yyyy 年数(西暦) 2020
m 6
d 日付 1
h 時間 0~23
n 0~59
s 0~59
hh 時間 00~23(2桁表示)
nn 00~59(2桁表示)
ss 00~59(2桁表示)
Left Caption

ひらめく人

Format関数は指定した値の表示を変換してくれるとても便利な関数なので自由に扱えるようにしておきましょう。

カウントダウンタイマーには、ユーザーフォームの表示設定が必要になります。

 

色を変えたり、文字の大きさを変えることで見やすいカウントダウンタイマーにすることができます。いろいろ設定してみてください。

上書き保存してエクセルを閉じるVBA

エクセルを閉じるVBAをには「上書き保存するVBA」の設定が必須事項です。決められた時間が経過したからといって保存せずにエクセルを閉じてしまうと編集した内容が消えてしまいます。

 

Left Caption

ひらめく人

複数の人が扱うエクセルファイルにはトラブルを避けるため、必ず「上書き保存するVBA」を設定しましょう。

上書き保存して閉じるVBAには「CloseMe」を使用しています。上記で紹介しているサンプルVBA②が「上書き保存して閉じるVBA」なので参考にしてみてください。

単純に時間が経過したら閉じるという設定ではなく、いくつか条件を持たせています。

 

  • 作業中のエクセルを上書き保存する
  • 複数のエクセルを開いているとき、エクセルは閉じない(現状維持させる)
  • 開いているエクセルが一つだけのとき閉じるを実行する

上記の条件を設定しておけば、制限時間で閉じるという処理をしてもトラブルが発生する心配はありません。

 

VBA初心者が効率化マクロを導入する方法

 

VBAなんて扱ったことないけどエクセル作業を自動化するマクロを導入したい!

このような問題を抱えながら日々のエクセル業務をこなしている方がおおくいらっしゃるのではないでしょうか。

 

こんな問題を解決する方法がこちら

  • マクロの開発を外注に依頼する
  • マクロが設定されたエクセルファイルをダウンロードする
  • 参考書やネットでVBAスキルを身に付ける

 

VBAの勉強を始める前は上記の方法で効率化マクロを導入していました。

 

 

 

完成されたマクロを使ってエクセル業務を処理する

作業効率が2倍以上アップ!!

便利すぎて自分でもマクロを設定したいと考え始める

参考書やネットの情報でVBAスキルを身に付ける

マクロ開発を代行できる程のスキルを習得

 

 

 

VBAは

他のプログラミングに比べて参考書やネットで紹介されている情報量が多いので初心者でも導入しやすい

という特徴があります。

 

毎日のルーティーン作業にうんざりしている、だれでもできる単純作業に時間を費やしている、という方はあなたに合った方法でVBAを導入しちゃいましょう。

 

マクロの開発を外注に依頼する

マクロの開発を外注に依頼する導入方法は

VBAを全く扱えない方でもエクセル作業を自動化できる最も簡単な方法

です。

 

「こんなエクセル作業を自動化したい」「作った資料を自動的にPDFで保存したい」「決まった様式に写真を自動で貼り付けたい」

こんな感じで実現したい内容を依頼するだけで業務内容に合ったマクロを開発してくれます。

 

Left Caption

ガッツポーズの人

完成まで本業に集中できるので効率的

 

 

デメリットは、費用がかかることだけ。

開発内容、依頼先によってかかる費用は大きく異なります。

私が会社員の頃利用していた業者さんは1マクロあたり2万円~3万円の費用がかかりました。

 

Left Caption

疑問がある人

ちょっと高くない。。。

 

ちなみに、マメBlogでもエクセルマクロ開発代行サービスを承っています。

開発内容の確認、VBAコードの設定、動作確認後の調整、など全ての工程を私(マメ父ちゃん)が行っているので、

費用が安い!スピード納期!!

でやらせてもらっています。

 

ほとんど独学で身に付けたVBAスキルなので、内容によっては開発できないこともあるのでご了承ください。

 

ご相談、見積もり依頼は完全無料ですので気になる方は下記のリンクよりお問合せ下さい。

 

 

マクロが設定されたエクセルファイルをダウンロードする

VBA初心者でも『マクロが設定されたエクセルファイルをダウンロード』ですぐにエクセル作業を自動化することができます。

 

たとえば、

A4用紙に写真を貼り付けてコメントを入力する作業を自動化したい!という場合、

『写真を貼り付けるマクロ』が設定されたエクセルファイルをダウンロードすれば問題解決です。

 

実際に、『写真を貼り付けるマクロ』をダウンロードして使っている様子がこちら

写真貼付けマクロの使い方を示したイラスト

 

 

Left Caption

ガッツポーズの人

写真貼付け作業の効率がめちゃくちゃアップ

 

 

『マクロが設定されたエクセルファイルをダウンロード』する導入方法は、

VBA初心者でもマクロを導入できる、費用が安い、

というメリットがあります。

 

しかし

VBAに関する情報が多く公開されているとはいえ、ネット上で想定するマクロは見つけることが難しい

というデメリットもあります。

 

Left Caption

ガッツポーズの人

お目当てのマクロが見つかればラッキー

 

個人ブログやファイルを販売できるサイト「note」や「Tips」ではいろんなマクロの情報が掲載されているので是非参考にしてみてください。

 

今までマメBlogで受注した効率化マクロを下記のnoteで掲載していますので併せてチェックしてみてください。

 

 

 

参考書やネットでVBAスキルを身に付ける

先程も紹介しましたが、

VBAは他のプログラミングに比べて参考書やネットで紹介されている情報量が多いので初心者でも導入しやすい

プログラミングです。

 

言い換えると、

情報量が豊富なので自分で勉強できちゃう

ということです。

 

私のVBAスキルはほとんど独学で身に付けたもので、

考えた処理のほとんどをVBAで表現できるレベルにまで到達した!

と思っています。

 

私の作ったマクロをプロのプログラマーが見れば、

お前の書くコードはインチキだ!「変数の宣言」とか「引数」を正しく使えよ!!

と感じるはずです。

 

でも、

私からすればどうでもいい!!!想定した内容を正しく処理できればよくないですか!?

 

独学であっても『写真を貼り付けるマクロ』『全てのシートをPDF出力するマクロ』『連番を振るマクロ』など、

業務内容に合ったマクロを開発できるようになれます。

 

独学でVBAスキルを身に付けるコツは、

エラーが発生してもいいからひたすらコードを書く、なんでもいいからエクセル作業をマクロ化してみる

です。

 

とは言っても、全くの知識0の方は何をすればいいかわからないですよね。

 

VBA知識0の初心者の方は、参考書『たった1秒で仕事が片づくExcel自動化の教科書【増強完全版】』を読んでみてください。

 

VBAの知識0の方でもすいすい読み進められる内容になっています。

やさしい内容にも関わらず「え!!VBAを使えばこんなことできるの!?」と感動すると思います。

 

実際に私はこの参考書を読んでからVBAの勉強を始めました。

 

Left Caption

ひらめく人

VBA学習スタートのきっかけをくれた参考書


 

 

VBAの魅力を発見した後は、

ひたすら自動化したい処理を実現するコードを書くだけ

です。

 

【VBA 写真を貼る】、【VBA PDF出力】、のようにネット検索すれば知りたいコードをすぐにゲットできます。

 

実現したい処理に向かって、「調べる→書いてみる→エラーを改善する→調べる」を繰り返していると

自然といろんなマクロが作れるようになっているはずです。

 

VBAに興味が湧いてきたという方は今からVBA学習をスタートさせちゃいましょう。