Excel-VBA上書き保存してエクセルファイルを閉じる方法

excel-vba Excel-VBA
スポンサーリンク

こんにちは、とりっぷぼうるです。

元々エクセルとは全く縁のない生活をしていましたが、人員不足などで少しでもデータ入力作業や集計作業を効率化するしか方法が無く、仕方がなくエクセルに取り組み始まました。

なぜならば、大きな会社ならば専用ソフトやクラウド上でデータ集計や管理を行うのでしょうけど、小さなところではそのようなお金もないのでエクセルで解決するしか方法が無いのですよね。

このような理由からエクセルに取り組み始めましたので、当然ながらエクセルの専門知識もなく、学校に通うこともできずにただ単にエクセルの書籍とにらめっこしながら取り組んでいます。

波乗りアヒル
波乗りアヒル

でも書籍のままだと実用的でないことが多く、VBAコードを組み合わせてみたら動いた!という実用例・体験談を書いています。

Excel-VBAの専門学校通学や・資格があるわけではありませんので、あくまでエラーにならずに動いてくれているVBAコードになりますので、掲載のVBAコードが同じように動く保証はできません。
実際に動いているエクセルは2009と2016です。

CloseとQuitどちらでもエクセルファイルは閉じられる

入力済みエクセルファイルを閉じる方法として当たり前ですが、

「ファイル」➡「上書き保存」と手順を進むのが当然の作業です。

これをエクセルVBAを使ってワンクリックで上書き保存してエクセルファイルを閉じることができれば、微々たるものですが作業効率が上がりますよね。

Closeオブジェクトでエクセルファイルを閉じる

Excel-VBAの書籍には上書き保存してエクセルを閉じる例としてこのように記載してあります。

Sub 変更を保存してブックを閉じる()
ThisWorkbook.Close SaveChanges:=True
End Sub

もちろんこれは、ワークシート上にコマンドボタンを配置した時に、マクロを登録するためのVBAコードなのですが、個人的にワークシート上にボタンがあるのが使いづらいので、オリジナルの入力画面でもあるユーザーフォームに保存終了ボタンを配置して使っています。

ボウリングリーグ戦MENU~LTB編

ユーザーフォームで作ったオリジナル入力画面

このユーザーフォームはボウリングのリーグ戦での成績表エクセルファイルで使っています。

画像のようにユーザーフォームに配置したコマンドボタン【保存終了】ボタンに、上書き保存してエクセルを閉じるVBAコードを書くならばこのようになります。

Private Sub CommandButton7_Click()
ThisWorkbook.Close SaveChanges:=True
End Sub
  1. コマンドボタン7をクリックすると
  2. 上書き保存してエクセルファイルを閉じる
  3. マクロ記述終了
波乗りアヒル
波乗りアヒル

ThisWorkBookがいいのかActiveWorkBookのどちらがいいのかは分かりませんが、試した結果は一緒だったので気にしていません。

この方法だと、ワークシートだけしか閉じられずエクセル自体は開いたままになってしまうので使い物になりません。

Application.Quitでエクセルファイルを閉じる

Excel-VBAの書籍には開いているエクセルファイルが変更されている時には、変更を保存するかどうかを確認するメッセージが表示されると記載してあります。

Sub ブックを閉じる()
Application.Quit
End Sub

もちろんこれも、先ほどのCloseオブジェクトと同じくワークシート上にコマンドボタンを配置した時に、マクロを登録するためのVBAコードです。

そして、変更がある場合には下記のようにメッセージが表示されますので保存してエクセルファイルを閉じるか、保存しないかを選択できます。

application-quit

保存するかどうかのメッセージが表示

波乗りアヒル
波乗りアヒル

エクセルファイルを閉じる方法は2つありますが、Closeオブジェクトでは完全にエクセルと閉じられず、Quitオブジェクトでは、いちいち上書き保存を聞かれ、作業効率化にならないので意味がありませんでした。

VBAでエクセル閉じる実用例

VBAを使って作業効率化の為に少しでも手間を省きたい。

上書き保存してエクセルをワンクリックでやりたいし、ついでにいろいろやってみたい。そんな思いから試して実際に使っているVBAコードをご紹介します。

QuitとCloseの合わせ技

エクセルファイルを閉じるCloseオブジェクトとQuitオブジェクトなのに、一長一短で一度は使うのあきらめましたが、一緒に使ったらどうなるか試してみました。

Private Sub CommandButton7_Click()
Application.Quit
ThisWorkbook.Close savechanges:=True
End Sub
波乗りアヒル
波乗りアヒル

結果成功!このVBAコードで【保存終了】ボタンをワンクリックで上書き保存してエクセル自体を閉じることができました。

勝手なイメージですが、Application.Quitで変更があれば上書き保存するかしないかを聞かれ、ThisWorkbook.Close savechanges:=Trueで上書きするとしているので、上手くいったと思っています。

QuitとCloseの順番が逆だと失敗しました。

正直、これができたからといっても僅かながらの手間の省力化と時短効果にしかなりませんが、できたことに満足ですけどね。

入力済みデータ消去して上書き保存終了

【保存終了】ボタンには、先ほどのVBAコードに付け加えたの次の内容です。

  1. 誤ってボタン押してしまったらエクセルを閉じてしまうのを防ぐため「はい」「いいえ」が選択できるメッセージを追加
  2. 「はい」の時は特定の範囲の入力データを消去してから上書保存終了する
  3. 「いいえ」の時は、何もせずに「MENU」画面に戻る
Private Sub CommandButton14_Click()
Msg = MsgBox(“レーン抽選データ消去して保存終了しますか?”, Buttons:=vbYesNo + vbQuestion)
If Msg = vbYes Then
Sheets(“HOME”).Range(“AP3:AP42,AW3:AW42,AX3:AX42”).ClearContents
Application.Quit
ThisWorkbook.Close savechanges:=True
End If
End Sub
  1. コマンドボタン14を押したら
  2. メッセージを表示して「レーン抽選データ消去して保存終了しますか?」を「はい」「いいえ」で選択させます。
  3. もし「はい」を選んだら
  4. シート名「HOME」のセルAP3~AP42とAW3~AW42とAX3~AX42の各範囲の値を消す(クリア)
  5. エクセルファイルを閉じる
  6. 上書き保存する
  7. メッセージIFステートメント終了
  8. マクロ記述終了

ちょっと長くなりましたが、簡単にいうと、「はい」を選択したら不要データクリアして保存終了、「いいえ」を選択したら、元に戻るという事です。

波乗りアヒル
波乗りアヒル

これをやっておかなかった時は、間違って押したらエクセル閉じられるのと、不要なデータを消す差なくてはいけない、不要な手間と無駄な時間が無くなり作業効率化できました。

各コントロールまとめて転記シリーズ

ユーザーフォームを使うと配置したコントロール(テキストボックスやラベルなど)とセルとの間で値のやり取りが多くなります。

よく使うのでまとめてみました。

値の場所転記したい場所説明ページ
セルの値ラベル名VBAコード
セルの値テキストボックスの値VBAコード
セルの値コマンドボタンの表示名VBAコード
セルの値セルの値VBAコード
テキストボックス入力値セルの値VBAコード
波乗りアヒル
波乗りアヒル

成績表作成には知っておきたいExcel-VBAもくじ

ボウリングハンデキャップのつけ方
HDCPの種類はリーグのルールにより複雑に ボウリングの成績表(リーグ戦)で必ず必要になるのが、ハンデキャップ(HDCP)です。 ボウリングご予約の時に一番多く使われているのが、女性にだけハンデキャップをつけてあげることが多いですね。 だいだい何点ぐらいのハンデキャップが多いの?
ボウリングリーグ対戦表の数字を名前に自動変換する方法
リーグ戦の対戦表をエクセルで作る時、数字で表されている番号を名前に自動的に変換できると作業時間が短くなり効率的ですね。たった2つのエクセル関数を使うだけで、簡単にできるんです。今回の回戦数を入力するだけで一発変換完了。もちろんお客様にスケジュール対戦表として渡すことも簡単ですよ。
人数に応じてリーグ対戦表を自動選択する方法
複数の表があり、条件に合った表を選んで、さらにセルの値を選んで数字を名前に自動変換できると、とても便利なエクセルができますよね。ボウリングのリーグ対戦表も人数により表が異なるので、参加人数が決まったら、自動的に表を選んで対戦番号がこれも自動的に参加者名に変換されると便利で作業効率がアップして時間短縮になりますよ。
波乗りアヒル
波乗りアヒル

エクセルの勉強お疲れ様です。ちょっとひと休みしませんか?

コメント