【VBA】ファイル操作(開く/閉じる/コピー/削除/ファイル名取得)

こんにちは、Ryoです。
あまり夏らしい印象がないまま夏も終わりに近づいていますが、いかがお過ごしでしょうか。
私は業務都合上、ほとんど夏季休暇取れないので余計に季節感ありませんね(笑)

さて、Excelを使って日々仕事をする中で切り離せないのはファイルに関連する操作ですが、
VBAでも同様にファイルに対して開いたり閉じたり、コピーしたり場合によっては削除したりという操作がありますから使う頻度も多いです。

今回はそのファイル操作で使用頻度が多いものについて書いてみたいと思います。



1.ファイル操作・・・「開く」

◆Workbooks.Open

これは一番使用頻度が多いのではないでしょうか。
ファイルを開く場合は、開きたいファイルの場所を指定する必要があります。

Workbooks.Open "ファイルの場所(フルパス)”

この指定だけで開けます。
例えばデスクトップの「Sample」フォルダからsample1.xlsxを開きたければ、

Workbooks.Open "C:\デスクトップ\Sample\sample1.xlsx"

と記述します。

◆ThisWorkbook.Path

VBA実行ファイルと同じ場所にあるファイルを開く場合に使います。
上で例としたフォルダ内としますと、

Workbooks.Open ThisWorkbook.Path & "\sample1.xlsx"

この時のThisWorkbook.Pathには”C:\デスクトップ\Sample”までが入りますので、
& で連結し、\を付けて”\sample1.xlsx”とファイル名を指定する必要があります。

◆ファイルの開き方色々

ファイルを開く際の指定として以下の種類があります。

①読み取り専用

Workbooks.Open ThisWorkbook.Path & "\sample1.xlsx" , ReadOnly:=True

②パスワードで保護されたファイルを開く

Workbooks.Open ThisWorkbook.Path & "\sample1.xlsx" , Password:="A12345B"

③続パスワードで保護されたファイルを開く(書き込み保護)

Workbooks.Open ThisWorkbook.Path & "\sample1.xlsx"  _
, WriteResPassword:="A12345B"

②と③はあまり使用頻度は高くないと思いますが、ご参考までに。

2.ファイル操作・・・「閉じる」

◆ActiveWorkbook.Close

ファイルを閉じる処理を行う場合は「Close」を使います。

先ず、アクティブになっているブックを閉じる場合は、

ActiveWorkbook.Close

これだけでOKです。
私の場合はデータ読み込み等の為に「読取り専用」で開いたファイルに対し、一通り処理してから本コマンドを使って閉じたりしています。

「読取り専用」以外のファイルですと保存を促すアラートが表示されたりしますので、

 Application.DisplayAlerts = False

 ActiveWorkbook.Close

 Application.DisplayAlerts = True

このようにApplication.DisplayAlertsで挟めばOKですが、間違って実行ファイルがアクティブになっていると「強制的に閉じる」ことになりますのでご注意を!

◆Workbooks(”ブック名”).Close

ブック名を指定して閉じる際は、

Workbooks(”ブック名”).Closeとしてブック名を指定すれば閉じることが出来ます。
その他の指定としては以下になります。

①上書き保存して閉じる場合

Workbooks(”ブック名").Close SaveChanges:=True

②保存をしないで閉じる場合

Workbooks(”ブック名").Close SaveChanges:=False

③ファイル名を変更して保存してから閉じる場合

Workbooks(”ブック名").Close SaveChanges:=True, Filename:="新ブック名"

上にも書きましたが、アラート無視する処理を加えつつ閉じる命令を実行したら
「実行ファイル」だった。。。とならないようにご注意くださいね。
私はたまにやらかして唖然・・・ってことがあります。
大事なことなので2回言いました(笑)

3.ファイル操作・・・「コピー」

ファイルをコピーする際は「FileCopy」を使用します。

FileCopy "C:\デスクトップ\Sample\sample1.xlsx", _
"C:\デスクトップ\CopyTest\sample1.xlsx"

“C:\デスクトップ\Sample\sample1.xlsx”がコピー元、
“C:\デスクトップ\CopyTest\sample1.xlsx”がコピー先です。

この場合はデスクトップのSampleフォルダから、同じデスクトップ上にあるCopyTest
フォルダへコピーを実行するものです。

◆同フォルダ内にコピーする場合

コピー元と同じフォルダ内にコピーしようとして上述コードを実行すると「上書き」され、
コピーはされません。(アラートも出ませんからね!ご注意を!)
この場合、コピー実行する処理の際にファイル名を操作する必要があります。

私が良く使うのは日時(年月日&時:分:秒)をファイル名に連結することで、名前が
被らない様に処理しています。

ymd = Format(Date, "yyyymmdd") '年月日を取得 例:20170826

tim = Format(Time, "hhmmss") ’現在時刻を取得 例:100523

このように日付と現在時刻をフォーマット指定で取得してから、

FileCopy "C:\デスクトップ\Sample\sample1.xlsx", _
"C:\デスクトップ\Samplet\sample1_" & ymd & "_" & tim & ".xlsx"

こうすることでコピー先のファイル名に連結させ、被らせないようにします。
但し、ファイル名が長くなるのと連続して大量にコピーするには向かないので、その場合は
For Nextを使って連番とした方が良いですね。

For i=1 To 30

 FileCopy "C:\デスクトップ\Sample\sample1.xlsx", _
 "C:\デスクトップ\Samplet\sample1_(" & i & ")" & ".xlsx"

Next i

こうすれば「ファイル名(1)~(30)」がコピーされます。

4.ファイル操作・・・「削除」

ファイルの削除には「Kill」を使用します。
物騒な名前の通り、このコマンドを使うとゴミ箱には行かずに抹消されます。
間違えて消しちゃったらEaseUS Data Recovery Wizard Professional [ダウンロード]
あると便利ですよ。私も使ってます。

Kill "C:\デスクトップ\Sample\sample1.xlsx"

フルパスでファイルを指定すれば綺麗さっぱり消してくれます。
使用中のファイルはエラー表示されますのでご注意を。

ちなみにワイルドカード(*)を使うこともできます。。。が、気を付けてくださいね。
関連するもの「全部抹消されます」から!

Kill "C:\デスクトップ\Sample\*.xlsx"

この場合、デスクトップにあるSampleフォルダ内の拡張子.xlsxが全て削除されます。

5.ファイル名の取得

◆ActiveWorkbook

処理を実行する際にアクティブとなっているファイル名を取得するなら、

bk_Name =  ActiveWorkbook.Name

これでOKです。

◆実行ファイル名の取得

実行ファイル自体のファイル名を取得するなら、

bk_Name =  ThisWorkbook.Name

これで取得できます。

◆指定フォルダ内のファイル名一覧を取得

指定したフォルダ内のファイル名一覧を取得する場合はDir関数を使います。

Sub test()

 Dim strFile As String
 Dim i As Integer
 '指定フォルダ内の.xlsxファイルをDirにて取得
 strFile = Dir("C:\デスクトップ\Sample\" & "*.xlsx")
  
  Do While strFile <> ""
     i = i + 1
     Cells(i, 1) = strFile
     strFile = Dir() 'Dir関数で見つけたファイル名をstrFile へ
  Loop

End Sub

サンプルコード内のフォルダ場所等を用途に応じて変更し実行すると、セルA1から
順次下方向にファイル名を書き出していきます。
これを応用して必要なファイルのみ抽出したり、削除したり等々出来ますので便利です。




以上がVBAで使用頻度が高いファイル操作(開く/閉じる/コピー/削除/ファイル名取得)ですが、よく使う割に忘れがちで「あれ?どうしたっけ?」となるのは私だけですかね(笑)

今回の記事が何かの参考になれば幸いです。

Ryo

スポンサーリンク
スポンサーリンク

楽天トラベル

シェアする

フォローする

スポンサーリンク

楽天トラベル