エクセルVBAマクロで、ファイルの削除方法についてです。今回はKillステートメントを使用します。
ファイルをピンポイントで完全削除するマクロを紹介します。コピペOKです。
こんにちは、じゅんぱ店長(@junpa33)です。
今回は、ファイルを削除するためのVBAコードについてです。
ファイルの削除のためには「Killステートメント」または「DeleteFile」を利用します。ここでは、コードの可読性の良いKillステートメントを使用することにします。
現在のPCはどれも、ストレージ容量が大きく、その分、不要になったファイルをすぐに廃棄しなくても、保存可能容量的には圧迫されることは無いでしょう。以前はファイル整理(削除)作業でフォルダ単位で ” バッサリ ”をというのがよくありました。
今は、ファイル削除と言えば、ファイル単位で必要限度の削除処理というイメージです。
なので、この記事では削除手法的に、
「その都度、目標のファイルを指定して、そのファイルを削除処理する」
というスタイルのマクロ(VBAコード)の記述方法を紹介したいと思います。
- ブックの知識
- ブックの操作
- ワークブックを開くOpenメソッドの書き方 Excelマクロ
- VBA ブック名の取得法4つの解決策を詳しく解説
- VBA 開く,保存,閉じる,作成,削除 ブックの存在確認後のコード記述
- ファイルの保存に年月日+時刻を付けて管理する
- VBA 保存先フォルダをダイアログ指定で変数化
- 新規ブック5つの保存法。AddとSaveAsの使い方がわかる
- セル値を使いブック名として保存。統一フォームに有用
- VBA シートをブックから切り出し名付け保存する
- ブック名に作成者名を付加。 プロパティ変更とファイル保存
- 不要フォルダを削除する2種類のコードの作成
- 要らないファイルを自動削除するコードの作成
- ワークブックを閉じる12のパターン使い分け VBA最速理解
- ピンポイントでファイルを完全に削除するマクロ(コピペ可)
コンテンツ
ファイルの削除を行うKillステートメント
Killステートメントは、記述構文としてはこのようになります。
Kill ファイルパス
ファイルパスの記述方法については別記事も参考にしてください。
Sub Killステートメント例示()
Kill "C:\Users\〇〇〇\Documents\削除対象ファイル\Book3.xlsx"
End Sub
このサンプルコードを実行すると、削除対象フォルダ内のBook3.xlsxが削除されます。
基本的にKillステートメントの使い方はこのようにして実行できます。
ただし、これは ” 基本的に ” であって、実務的にはこれだけでは利用価値がありません。最低限の問題を処理しておく必要があります。
- マクロに直接に「削除ファイルのパス」を書くくらいなら、マウスで手動削除した方が速い。「削除ファイルのパス」はその都度変えれるようにしたい。
- 実務での、ファイルを開いて内容を確認して「不要なら削除」の作業手順の中で削除をしたい。ファイルが開いた状態ではこの「基本的なKillコード」は実行できない。
- 「やっぱり削除を止めます」を出来るようにしたい。
指定したファイルを完全に削除する
例示として、マクロ実行ブックと同じフォルダにある「Book2.xlsx」をピンポイント削除します。
処理前のフォルダ
処理後のフォルダ
削除コード全体は以下のようになります。
Sub ファイルの削除1()
Dim BkName As Variant
Dim wb As Workbook
Dim Ans As Integer
'■-----------ファイル名取得部分
ChDir ThisWorkbook.Path
BkName = Application.GetOpenFilename(filefilter:= _
"Excelファイル,*.xls*", Title:="ファイル選択")
'--●---------ファイル名を取得できたとき
If BkName <> False Then
'--●-▲------指定したファイルが現在開かれた状態かどうか
For Each wb In Workbooks
If wb.Name = Dir(BkName) Then
MsgBox wb.Name & "が選択されました。" & vbCrLf & _
"" & vbCrLf & "このファイルは開かれています。" _
& vbCrLf & "" & vbCrLf & "いったん終了させます。", _
vbInformation
wb.Close False
Exit For
End If
Next
'--●-▲------指定したファイルが現在開かれた状態かどうかここまで
Ans = MsgBox(BkName & vbCrLf & "" & vbCrLf & _
"を本当に削除しますか?", vbYesNo + vbExclamation, _
"ファイル削除確認")
'--●---------ファイル名を取得できなかったとき
Else
MsgBox "キャンセルされました"
Exit Sub
End If
'■-----------ファイル名を取得できたかどうか条件分岐ここまで
'◆-----------削除実行
If Ans = 6 Then
Kill BkName
MsgBox "ファイルが完全に削除されました。", vbInformation
Else
MsgBox "ファイルの削除を中止しました。", vbInformation
Exit Sub
End If
'◆-----------削除実行ここまで
End Sub
ファイル名取得部分
ファイルをピンポイントに指定する方法はダイアログを利用します。
このファイル名取得部分のVBAコードを実行すると、ファイル選択のダイアログが表示されます。
最初に表示されるフォルダは「ChDir ・・・」によって変更出来ます。
キャンセルボタンをクリックすると「キャンセルメッセージ」が表示されます。
ファイルを取得の状態
ファイル名を取得した場合
完全に削除するかどうかの最終確認メッセージが表示されます。
ダイアログでファイルを選択し、開くボタンをクリックすると、削除するかどうか最終確認されます。
取得したファイルが現在開かれている場合
ファイルが現在開かれている時は、「開かれているメッセージ」が表示されて、そのファイルが閉じられます。
ダイアログでファイル選択、開くクリックで、そのファイルが現在開かれていた場合は、そのファイルを閉じて良いかを確認してきます。「OK」をクリックすると「保存しないで終了(削除が前提なので)」されます。
次に、完全に削除するかどうかの最終確認メッセージが表示されます。
ファイル名を取得できなかった場合
ファイル名が取得できなかった場合は、「ファイル削除中止」のメッセージが表示されます。
初めの時点でダイアログでファイル選択せずに「キャンセル」した場合や、ファイル削除確認で「いいえ」をクリックした場合は、削除を中止します。
指定のファイルを削除
指令したファイルを削除した場合は、「削除完了」メッセージが表示されます。
正常に削除が実行されれば、削除完了のメッセージが表示されます。
まとめ
ファイルをピンポイントで指定削除処理するマクロ(VBAコード)を紹介しました。
特に、必要か不要かをファイルを開き確認してのファイル削除作業は、” 開いて閉じて削除して ” と作業が結構面倒です。
このマクロなら、横でマクロ実行ブックを起動しておき、削除ファイルを開いたままの状態で自動削除することが出来ます。
このマクロに使っているVBAコードも「絶対パスではなく相対パス」を使用していますので、導入したいエクセルブックにコピペで実行させることが出来ます。
マクロのコピペの方法についてはこちらの Webで見つけたマクロをコピペで使う を参考にしてください。
エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。
エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です今回の記事はここまでです。 最後までご覧いただき有難うございました。
<記事内容についての告知>
VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。
アンケートでポイ活しよう!!
アンケートに答えれば答えるほど ”使える” ポイントがたまります。