【VBA】ファイル削除を自動化する3つの方法~初心者でも安全な自動化テクニック~

 

VBAでファイル削除を自動化したいけれど間違って大切なファイルを削除してしまったらどうしよう。。。

 

こんな不安を抱えていませんか?

 

正しい方法を知らずにVBAでファイル削除を行うと、復元不可能なデータ消失や予期しないエラーが発生する危険性があります。

しかし、

適切な安全対策とエラーハンドリングを身につければ、初心者でも安心してファイル削除の自動化が可能です。

 

この記事では、VBAプロが実際に使用している3つの削除方法を、豊富なサンプルコードとともに詳しく解説します。

基本的なKillステートメントから高度なFileSystemObjectまで、どんなエクセル業務にも応用できる内容になっています。

 

安全で効率的なファイル削除VBAを設定してエクセル業務の効率をアップさせましょう。

 

広告

VBAファイル削除の基本知識と注意点

VBAでファイル削除を行う際は、適切な知識と安全対策が必要不可欠です。

なぜなら、

一度削除したファイルは簡単に復元できないため、予期しないデータ消失のリスクが高いから

です。

 

特に業務で使用するファイルやシステムファイルを誤って削除してしまうと、深刻な問題を引き起こす可能性があるので注意しましょう。

 

VBAでファイル削除を行う前に知っておくべき重要なポイント

ファイル削除の実行前には、必ずファイルパスの確認と削除対象の特定が重要です。

もし、間違ったファイルパスを指定すると想定外のファイルが削除される危険があります。

 

対策としては、

“C:\temp\test.txt"のようにフルパスで指定し、相対パスの使用は避ける

が挙げられます。

 

また、削除対象のファイルが現在使用中でないことを確認し、重要なファイルには事前にバックアップを取っておくことも必須です。

 

ファイル削除時の安全対策とエラー回避方法

エラーハンドリングの実装は、VBAファイル削除において最も重要な安全対策です。

ファイルが存在しない場合やアクセス権限がない場合に発生するプログラムが停止してしまうエラーを防ぐことができます。

 

エラーハンドリングを実装したサンプルコードがこちら

Sub SafeFileDeleteWithErrorHandling()
Dim filePath As String
filePath = "C:\temp\sample.txt"

On Error Resume Next

' ファイル削除実行
Kill filePath

' エラーの種類を判定して適切な処理を実行
Select Case Err.Number
Case 0
MsgBox "ファイルを正常に削除しました: " & filePath
Case 53
MsgBox "エラー: ファイルが見つかりません - " & filePath
Case 70
MsgBox "エラー: ファイルへのアクセスが拒否されました - " & filePath
Case 75
MsgBox "エラー: ファイルが使用中です - " & filePath
Case Else
MsgBox "予期しないエラーが発生しました: " & Err.Description
End Select

On Error GoTo 0 ' エラーハンドリングを解除
End Sub

 

このような適切なエラーハンドリングにより、プログラムの安定性が大幅に向上し、予期しない停止を防ぐことができます。

 

関連記事「On Error Resume Nextの使い方」では、でエラーを無視する方法が紹介されています。

[blogcard url="https://mamemametochan.com/excel-125/"]

 

 

 

完全削除とごみ箱削除の違いを理解する

VBAでのファイル削除は完全削除となり、ごみ箱には移動されません。

 

理由として、

VBAの削除コマンドはWindowsのファイルシステムに直接働きかけるため、通常の削除操作とは異なる動作をするから

です。

 

KillステートメントやFileSystemObjectのDeleteFileメソッドで削除されたファイルは、即座にハードディスクから完全に削除されます。

一方、エクスプローラーでの削除はごみ箱に移動するため復元が可能です。

 

VBAでファイル削除を行う際は、この違いを十分に理解しておきましょう。

 

【方法1】Killステートメントによるファイル削除

Killステートメントは、VBAでファイル削除を行う最も基本的で簡単な方法です。

シンプルな構文で直感的に使えますが、使用時には適切なエラーハンドリングと事前チェックを確実に行い、安全にファイル削除処理を実行しましょう。

 

Killステートメントの基本構文と使い方

Killステートメントの基本構文は非常にシンプルで、初心者でも理解しやすい形式です。

 

基本構文

Kill "ファイルパス"

 

複雑な設定や宣言が不要なのでめちゃくちゃ使いやすい。

 

Killステートメントを使ったサンプルコードがこちら

Sub 削除()
Kill "C:\temp\sample.txt"
End Sub

 

上記のコードは

「sample.txt」ファイルを削除する

という内容です。

 

また、変数を使用して動的にファイルパスを指定することも可能です。

 

Dim filePath As String
filePath = "C:\temp\data.xlsx"
Kill filePath

 

シンプルな構文なのでVBA初心者でも簡単にファイル削除機能を実装できるのではないでしょうか。

 

単一ファイルの削除コード例とサンプル実行

単一ファイルの削除は、最も基本的で安全な削除方法です。

削除対象が明確で、予期しない複数ファイルの削除リスクがありません。

 

単一ファイルのサンプルコードはこちら

Sub DeleteSingleFile()
Dim targetFile As String
targetFile = "C:\temp\test.txt"

If Dir(targetFile) <> "" Then
Kill targetFile
MsgBox "ファイルを削除しました: " & targetFile
Else
MsgBox "ファイルが見つかりません: " & targetFile
End If
End Sub

上記のコードは

test.txtファイルを検索し、ファイルが存在するときは削除。ファイルが存在しないときは「ファイルが見つかりません」というメッセージボックスを表示する

という内容です。

 

このコードは事前にファイルの存在確認を行い、安全にファイル削除を実行します。

 

ワイルドカード(*)を使った複数ファイル削除

ワイルドカードは、複数のファイルを一度に削除できる便利な機能です。

同じ拡張子や名前パターンを持つファイル群をまとめて処理できます。

 

具体的には、Kill “C:\temp\*.txt"と記述すると、

tempフォルダ内のすべてのテキストファイルを一括削除する

ことができます。

 

また、Kill “C:\temp\backup_*.xlsx"のように部分一致での削除も可能です。

 

ワイルドカードは削除対象の範囲を十分に確認し、重要なファイルが含まれていないことを事前にチェックしておきましょう。

 

【方法2】FileSystemObjectを使った高度なファイル削除

FileSystemObjectは、VBAでファイル操作を行う際の最も強力で柔軟な方法です。

 

詳細なファイル情報の取得や高度な削除制御が可能で、エラーハンドリングも豊富に実装することが可能です。

特に大量のファイル処理や複雑な条件での削除が必要な業務システムでは、FileSystemObjectの使用が推奨されています。

 

FileSystemObjectの基本設定と削除メソッド

FileSystemObjectを使用するにはまず適切な宣言と初期化が必要で、外部オブジェクトを参照するために明示的にオブジェクトを作成する必要があります。

 

具体的なFileSystemObjectの宣言方法がこちら

Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")

 

削除にはDeleteFileメソッドを使用します。

 

DeleteFileメソッドの基本構文がこちら

fso.DeleteFile "C:\temp\sample.txt"

 

また、使用後はSet fso = Nothingでオブジェクトを解放することで、メモリリークを防ぐことができます。

このような適切な初期化により、安定したファイル削除処理が可能です。

 

DeleteFileメソッドの詳細な使い方

DeleteFileメソッドは、FileSystemObjectの中核となる削除機能です。

読み取り専用ファイルの削除や詳細なエラー情報の取得が可能です。

 

DeleteFileメソッドを使ったサンプルコードがこちら

Sub DeleteFileWithFSO()
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")

' 基本的な単一ファイル削除
If fso.FileExists("C:\temp\sample.txt") Then
fso.DeleteFile "C:\temp\sample.txt"
MsgBox "ファイルを削除しました"
End If

' 読み取り専用ファイルを強制削除(第2引数にTrue)
If fso.FileExists("C:\temp\readonly.txt") Then
fso.DeleteFile "C:\temp\readonly.txt", True
MsgBox "読み取り専用ファイルを削除しました"
End If

' ワイルドカードを使用した複数ファイル削除
fso.DeleteFile "C:\temp\*.log", False

Set fso = Nothing
End Sub

 

上記のコードは

通常のファイル、読み取りのファイル、複数のファイル、を削除する

という内容です。

 

このような柔軟な削除制御により、様々な状況に対応した安全なファイル削除が実現できます。

 

KillステートメントとDeleteFileの違いと使い分け

「Killステートメント」と「DeleteFile」の主な違いは、

エラーハンドリングの精度と削除可能なファイル種類

にあります。

 

具体的には、

DeleteFileメソッドは、詳細なエラー情報を提供し読み取り専用ファイルの処理に優れている

Killステートメントは軽量で高速だが読み取り専用ファイルを削除できない

という特徴の違いです。

 

シンプルな削除にはKillステートメント、複雑な条件や大量処理にはDeleteFileメソッド

を選択するといいでしょう。

 

【方法3】安全なファイル削除のための事前チェック機能

事前チェック機能は、VBAファイル削除において最も重要な安全対策です。

 

削除前にファイルの存在確認や属性チェックを行うことで、予期しないエラーや誤削除を防ぐことに繋がります。

 

特にエクセル業務では、

削除対象ファイルの状態を詳細に確認してから削除を実行することが必須

です。

 

適切な事前チェック機能により、システムの安定性が向上し、データ消失のリスクを大幅に軽減できます。

 

Dir関数でファイル存在確認を行う方法

Dir関数は、ファイルの存在確認を行う最も基本的で効率的な方法です。

 

Dir関数を使った基本的なサンプルコードがこちら

Sub BasicDirExample()
Dim fileName As String
fileName = Dir("C:\Users\Documents\sample.xlsx")

If fileName <> "" Then
MsgBox "ファイルが見つかりました: " & fileName
Else
MsgBox "ファイルが見つかりませんでした"
End If
End Sub

 

上記サンプルコードは、

ドキュメントフォルダ内に「Sample.xlsx」というファイルがあるかどうかを検索する

という内容です。

 

 

Dir関数は一度呼び出した後、再度引数なしで呼び出すことで、同じ条件に一致する次のファイルを順次取得できる連続検索機能も備えています。

 

関連記事「Dir関数の使い方」では、ファイル検索とフォルダ操作を自動化する方法が紹介されています。

[blogcard url="https://mamemametochan.com/excel-123/"]

 

ファイル属性チェックと削除権限の確認

ファイル属性の確認は、削除可能性を事前に判定する重要な処理です。

読み取り専用ファイルやシステムファイルは通常の削除方法では削除することができません。

 

ファイル属性をチェックするためにはGetAttr関数の利用が便利です。

具体的には、GetAttr(“C:\temp\sample.txt")関数でファイル属性を取得し、If (GetAttr(filePath) And vbReadOnly) = 0 Thenのように読み取り専用でないことを確認できます。

また、If (GetAttr(filePath) And vbSystem) = 0 Thenでシステムファイルでないことも確認可能です。

 

このような属性チェックにより、削除可能なファイルのみを対象とした安全な処理が実現できます。

 

エラーハンドリングを組み込んだ削除処理

エラーハンドリングは、VBA処理を中断させないために重要な技術です。

業務内容に合わせたエラーハンドリングを実装することでシステムの安定性を保つことができます。

 

エラーハンドリングを使ったVBAのサンプルコードがこちら

Sub SafeFileDelete()
Dim filePath As String
filePath = "C:\temp\sample.txt"

On Error GoTo ErrorHandler

If Dir(filePath) <> "" Then
Kill filePath
MsgBox "削除完了: " & filePath
Else
MsgBox "ファイルが見つかりません: " & filePath
End If

Exit Sub

ErrorHandler:
Select Case Err.Number
Case 53: MsgBox "ファイルが見つかりません"
Case 70: MsgBox "ファイルがアクセス拒否されました"
Case Else: MsgBox "予期しないエラー: " & Err.Description
End Select
End Sub

上記のコードは

処理中にエラーが発生すると16行目にジャンプし、エラー内容をメッセージボックスで表示する

という内容です。

 

このようなエラーハンドリングにより、安全で信頼性の高いファイル削除処理が実現できます。

 

VBA初心者が『ファイル削除を自動化するVBA』を導入する方法

 

VBAなんて扱ったことないけど、業務内容に合わせた『ファイル削除VBA』を導入したい!

 

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

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

 

VBAスキルを身に着ける前は、「マクロ開発の外注」で対応していましたが、

今では自分で効率化マクロをサクッと導入しちゃいます。

 

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

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

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

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

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

 

 

VBAは

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

という特徴があります。

 

外注した方が楽だけど、費用がかかる。自分で導入すれば費用は0円だけど時間がかかる。。

いずれにせよ、効率化マクロを導入できれば作業効率が飛躍的にアップするのは間違いありません。

 

あなたに合った方法で導入しちゃいましょう。

 

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

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

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

です。

 

「ファイル削除を自動化したい」「業務内容に合わせて効率的にファイルを削除したい」

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

 

ガッツポーズの人

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

 

 

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

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

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

 

疑問がある人

ちょっと高くない。。。

 

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

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

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

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

 

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

 

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

 

 

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

VBA初心者でも『マクロが設定されたエクセルファイルをダウンロード』することで、

すぐに使っているエクセルにマクロを導入することができます。

 

VBA初心者でも形になっているマクロをゲットできる、費用が安い、

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

しかし、

想定するマクロを見つけることが難しい、業務内容に合わせるためのアレンジが必要

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

 

ガッツポーズの人

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

 

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

 

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

 

 

 

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

先程も紹介しましたが、

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

プログラミングです。

 

言い換えると、

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

ということです。

 

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

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

と思っています。

 

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

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

と感じるはずです。

 

でも、

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

 

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

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

 

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

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

です。

 

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

 

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

 

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

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

 

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

 

ひらめく人

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


 

 

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

ひたすら自動化したい内容のコードを書くだけ

です。

 

【VBA ファイル削除】【VBA データ削除】でネット検索すれば知りたいコードをすぐにゲットできます。

 

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

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

 

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