VBAで大量のデータを処理する場合や該当する
ファイル・ブックを移動させたい場合、
「Name」の機能を使用すれば、保存先のフォルダに変更・移動させることができます。
たとえば、csvファイルが順次、指定フォルダに入ってきて処理する際に
読み取ったデータを過去データとして保管したい場合などには便利です。
さらにブック名の名前の変更も可能です。
是非、内容を参考にしてファイル・ブックの保存先のフォルダに変更・移動させてみてください。
それではみていきましょう。
⬛︎こんなことができるようになる!
・ファイル・ブックの保存先のフォルダを変更・移動させることができる
・読み込んだファイル・ブックを移動させることができる
⬛︎忙しい人向けの見本プログラム
赤文字の変更前のフルパス、青文字の変更後のフルパスを打ち換えてください。
Sub ファイル変更()
Dim Filename As String
Filename = Dir(“変更後のフルパス“)
If Filename = “” Then
Name “変更前のフルパス” As “変更後のフルパス“
Else
MsgBox “同じファイル名が存在します。移動先・ファイル名を見直してください”
End IfEnd Sub
⬛︎構文の設定
Name 変更前のフルパス As 変更後のフルパス
フルパスとは例えば「C:\読み取り前\ブックA.xlsx」のようなものです。
見本では「Cドライブ」の「読み取り前」というフォルダにある「ブックA」という意味になります。
フルパスを簡単にコピーできる方法については下記記事をご参照ください。
【マクロVBA知識 16】ブックを開く・作成・名前の変更・フォルダの移動・保存・閉じる ► 独学エクセル塾 (dokugakuexcel.com)
⬛︎ファイルの保存先フォルダを変更する
では本題に移りたいと思います。
例として「読み取り前」というフォルダから「読み取り後」というフォルダに移動させてみましょう。
今回は「読み取り前」のフォルダに「ブックA」というExcelファイルを保存しています。
では構文を見ていきましょう。
Name 変更前のフルパス As 変更後のフルパス
とてもシンプルですね。
今回の例では「Cドライブ」の「読み取り前」というフォルダに保存しているので
「C:\読み取り前\ブックA.xlsx」というようになります。
ですのでこの文字が変更前のフルパスになります。
変更後のフォルダを「読み取り前」から「読み取り後」に変えたいので
「C:\読み取り後\ブックA.xlsx」というようになります。
こちらが変更後のフルパスですね。
では実際に、プログラムを作成してみましょう。
プログラムはこのようになります。
Sub ファイル変更()
Name “C:\読み取り前\ブックA.xlsx” As “C:\読み取り後\ブックA.xlsx“
End Sub
実行した結果はこちらになります。
「読み取り前」のフォルダから「読み取り後」のフォルダに移動できました。
MoveFileでの移動もできますが、「Name As」がシンプルで1番簡単だと思います。
⬛︎ファイル名を変更する
先程はフルパスを入力してフォルダの移動を行いました。
同じ方法でファイルの文字列を変更すると、ファイル名を変えることができます。
では「読み取り後」のフォルダに入ってある「ブックA」というファイルを
「ブックB」という名前に変更してみましょう。
プログラムはこのようになります。
Sub ファイル変更()
Name “C:\読み取り後\ブックA.xlsx” As “C:\読み取り後\ブックB.xlsx“
End Sub
先ほどと原理は同じですね。
それでは実行してみます。結果はこのようになりました。
「ブックA」から「ブックB」にファイル名が変更できていますね。
⬛︎よくあるエラーと対処法について
・実行時エラー’58’:既に同名のファイルが存在しています
こちらは文字通り、移動先のフォルダに同じファイル名のファイルが存在する。または
変更後の名前のファイル名が既に存在していることが原因です。
このエラーに関しては同じファイル名が無いか確認する必要があるのですが、
VBAのプログラムで自動で判別してくれたら便利ですよね。
そこで使用するのがDir関数になります。
Dir関数では入力したファイル名が存在しない場合は空白が返ってきます。
ちなみにファイル名が存在したらそのファイル名が返ってくる仕組みです。
Dir関数について詳しくまとめていますので是非参考にしてみてください。
【マクロVBA】Dir関数で指定フォルダから対象ファイル・ブックが存在するか確認、処理する!一覧も可 ► 独学エクセル塾 (dokugakuexcel.com)
ではプログラムを見てみましょう。
Sub ファイル変更()
Dim Filename As String
Filename = Dir(“C:\読み取り後\ブックB.xlsx”)
If Filename = “” Then
Name “C:\読み取り後\ブックA.xlsx” As “C:\読み取り後\ブックB.xlsx”
Else
MsgBox “同じファイル名が存在します。移動先・ファイル名を見直してください“
End IfEnd Sub
仕様として移動先・変更後のブック名が存在した場合は
メッセージボックスで「同じファイル名が存在します。移動先・ファイル名を見直してください」
というメッセージを表示させ、問題がなければそのまま処理するプログラムになります。
実際に同じファイル名が存在する場合はこのような画面になります。
これで、実行値エラーを防止することができます。
⬛︎公式の説明
わかりやすいように説明したため公式と使用する語句が異なりますが
マイクロソフト公式の説明については下記のリンクを参照してください☟
Name ステートメント (VBA) | Microsoft Docs
⬛︎まとめ
いかがだったでしょうか。
ファイルの保存先の変更やファイル名の変更を「Nameステートメント」でできます。
読み取ったデータを読み取り後のファイルに移動させたり
用途は様々です。
是非参考にしてみてください。
それでは次回の記事でお会いしましょう。
コメント