VBAのファイルは基本的に何度も使うものです。何度も繰り返し行っている仕事を自動化するためのものだからです。
ということは、使い方によっては、
毎回、使う時に初期状態に戻したい
っていうこともよくあります。
今回はそんな時に便利なVBA、
”前回実行時に増えたシートを削除して初期状態に戻す”
方法のご紹介です。
今回のコードはこんな感じです。2段構えになっています。
何でかというと、説明のために、なにかしらの操作をしてシートを増やす必要があるからですね^^;
Sub DeleteSheets()
Dim objSheet As Worksheet
'削除する時のメッセージを消す
Application.DisplayAlerts = False
'全部のシートを1つずつチェック
For Each objSheet In ThisWorkbook.Worksheets
If (objSheet.Name <> "Sheet1") Then
Worksheets(objSheet.Name).Delete
End If
Next
'再度メッセージが表示されるように戻す
Application.DisplayAlerts = True
'CSVファイルを探してデータをコピー
Call CopyFile(csv)
End Sub
Function CopyFile(FileType As String)
Dim buf As String
Dim Path As String
' このファイルがあるフォルダのパスを取得
Path = ThisWorkbook.Path
'CSVファイルだけを取ってくる
buf = Dir(Path & "\" & "*." & FileType)
'該当するファイルが無くなるまでループ
Do While buf <> ""
'見つけたファイルを開く
Workbooks.Open Path & "\" & buf
'シートをまるごとコピー
Worksheets(1).Copy After:=ThisWorkbook.Worksheets("Sheet1")
'CSVファイルを閉じる
Workbooks(buf).Close
'次のファイルを取得
buf = Dir()
Loop
End Function
2個目に書いてあるCopyFileというのは、以前紹介した『フォルダ内に入ってるファイルからデータをコピー』するVBAと同じものです。(ファイルの形式をCSV以外にも対応できるように少し改変を加えてます。)
ブログの記事と動画はこちらをご参照ください。
ブログはこちら
動画はこちら
このCopyFileというのを実行することによってシートが増えるのですが、次にまた実行する時に前回増えたシートを消すのがDeleteSheetsの方になります。
存在しているシートを一つずつチェックしていって、条件に当てはまっているシート(今回の場合はSheet1以外のシート)を削除するというものです。
シートを削除するためのForEach ~ Nextの部分の前後にある
Application.DisplayAlerts = False
Application.DisplayAlerts = True
この2文は、シートを削除する時に出るアラートメッセージを表示しないようにするためのものです。
シートを削除しようとするとこんなメッセージ出ますよね。
VBAの実行時に、こんなメッセージが毎回出て実行が止まっては困ります!
というわけでこのメッセージを表示しないようにひと手間が必要になってくるわけです。
こちらのコードの解説は、YouTubeにて動画で説明していますので、良かったらそちらもご覧になってみてください。
実際に1行ずつ実行しながらなので理解がしやすいと思います!
この記事がどなたかのお役に立てれば嬉しいです。最後まで読んでいただいてありがとうございました。
お問い合わせ、お仕事のご依頼などがありましたら下記のお問い合わせフォームからご連絡お願いします。
お問い合わせフォーム
自分で使うVBAの書き方で詰まっている方のお手伝いであれば5,000円ほどから、VBAを一から作成して納品であれば3万円ほどから承ります。
コメント