【Excel VBA】If Elseとは違う条件式(Select Case)について
エンジニアのIMMRです。Excel VBAの条件式には、以前に説明したExcel VBA 条件式(If Else)とこれから説明するSelect Caseの二つあります。1.従来のIf Else条件式If Elseは条件に合った時は処理Aを、条件に合わなかったら処理Bを実行します。では、下記のようなデータがあり、複数の条件があるとします。If Elseを使用して作成すると2種類の方法が浮かぶと思
Workteria(ワークテリア)では難易度の高いものから低いものまで、スキルや経験に合わせた案件を多数揃えています。会員登録は無料ですので、ぜひ会員登録してご希望の案件を探してみてください!
フリーランス/正社員のエンジニアとして活躍するには、ご自身のスキルや経験に合わせた仕事を選ぶことが大切です。ご希望の案件がみつからない場合はお気軽にお問い合わせください!ユーザ満足度の高いキャリアコンサルタントが在籍していますので、希望条件や悩み事などなんでもご相談ください。ご希望にピッタリの案件をご紹介させていただきます。
皆さんこんにちは、エンジニアのIMMRです。
例えば下記のようなブックがあったとします。
図1 ブック59
このようなブックに日々、一人ひとりが記載して保存をするブックとします。
例えば、このブックを保存ボタンをクリックした度に別の場所にバックアップ用のデータを作成したいとします。
作業としては、その都度、別名で保存とかの作業をするのではなく、
下記の図のように、現物であるブックの保存ボタンを押したら、自動で別名で、別の場所にバックアップデータを作成します。
図2 保存形式
何かのデータを入力してからプログラムを実行するのではなく、上書き保存ボタンをクリックした度の実行なのでイベント機能を使用します。
イベント機能については下記、記事でも説明しております。
【Excel VBA】セル内の値が変更された時点で、プログラムを実行する方法
設定方法などについては、上記記事を参照ください。
そして、今回は保存をした後の実行のなので「Workbook_AfterSave」を使用します。
図3 保存後の実行
この中にプログラムを記載します。
ブックのバックアップを行うのに必要な情報があります。
今回は下記、フォルダー(C:\バックアップデータ)に作成することにします。
図4 バックアップ用のフォルダー
同じ名前だと上書きをしてしますので、毎回名前を変える必要があります。
いろいろ方法はありますが、ここでは、
「元のブック名」+「_」+「保存をした日時(年・月・日・時・分・秒)」
とした名前にしたいと思います。これなら何度行っても名前が重なることはないです。
下記がサンプルプログラムです。
サンプルプログラム
Private Sub Workbook_AfterSave(ByVal Success As Boolean)
Dim sa_Path As String, sa_Data As String
sa_Path = "C:\バックアップデータ"
sa_Data = Replace(ActiveWorkbook.Name, ".xlsm", "") & "_" & _
Year(Now) & Month(Now) & Day(Now) & Hour(Now) & Minute(Now) & Second(Now)
Application.EnableEvents = False
ActiveWorkbook.SaveAs sa_Path & "\" & sa_Data & ".xlsm"
Application.EnableEvents = True
Application.Quit
End Sub
では、サンプルプログラムについて解説します。
変数「sa_Path」には、バックアップのデータを保存するパスをセットしています。
変数「sa_Data」には、バックアップデータの名前をセットしています。
Replaceでは、元のデータ名から拡張子を外しています。ABC.xlsm → ABC
その後ろに”_”(アンダーバー)を付けています。
そして、最後に保存ボタンを押した時の年・月・日・時・分・秒をつけています。
ActiveWorkbook.SaveAs で保存
バックアップを保存するパス + 「sa_Data」で作成したデータ名 + 拡張子
で別名の保存をするのですが、ここで保存をすると
保存をした(イベント)ということでWorkbook_AfterSaveの出だし(最初)に戻ってしまいます。
そうなると無限ループになり、処理が終わらなくなってしまいます。
そのようにならないためにApplication.EnableEventsを前後に記載しています。
Application.EnableEventsは、イベントの機能を無効にするためのものです。
Falseにすることで、イベント機能を無効にします。
そして、保存を行います。イベント機能を無効にしているのでイベント機能は発生しません。
保存が終わったら、Trueにして、イベント機能の無効を解除します。
最後にApplication.Quitを使ってブックを閉じます。
では、実際に実行をしていきたいと思います。
まず、下記のようにバックアップのフォルダーの中には、なにもないです。
図5 バックアップ用のフォルダー(実行前)
では、保存ボタンを押してプログラムを実行してみます。
図6 プログラムの実行
保存ボタンを押して実行していますが、ここで重要になってくるのが保存ボタンを押した日時です。
ここでは、2023年6月29日10時11分 に実行しています。
では、バックアップのフォルダーを確認してみます。
図7 バックアップ用のフォルダー(実行後)
「元のブック名」+「2023629101140」という名前で保存されています。
「2023629101140」は、2023年6月29日10時11秒40秒ということです。
無事、保存を押した時点の時間でコピーが出来ています。
ブックを保存するたびにバックアップデータを作成することができました。
そのような方はぜひ、Workteriaサイトをご利用ください!
定期的にご本人に合う高額案件を紹介
リモートワークなど自由な働き方ができる案件多数
専属エージェントが契約や請求をトータルサポート