VBA ファイルやフォルダーの名前変更、別の場所に移動(Name)

🔧 基本構文

Name oldpathname As newpathname
  • oldpathname:現在のファイル(またはフォルダー)のフルパス
  • newpathname:変更後のファイル名または移動先のパス

✅ 例:ファイル名を変更

Name "C:\test\old.txt" As "C:\test\new.txt"

この例では、old.txt というファイルが new.txt に名前変更されます。


🔁 ファイルの移動にも使用可能

Name "C:\test\data.txt" As "D:\backup\data.txt"

このように、名前変更と同時に場所も変えることができます。
ただし、ドライブをまたぐ移動は不可です(後述)。


📁 フォルダー名の変更

Name "C:\test\OldFolder" As "C:\test\NewFolder"

このように、フォルダー名も変更可能ですが、以下の注意が必要です。


⚠️ Name ステートメントの制限と注意点

項目内容
📌 上書き禁止newpathname にすでにファイルが存在する場合はエラーになります。
❌ ドライブ跨ぎ禁止C:\D:\ のように、異なるドライブ間の移動はできません
🈲 開いているファイル不可対象ファイルがアプリで開かれているとエラー (Permission denied) になります。
🔐 読み取り専用も注意読み取り専用属性のファイルにも注意が必要(事前に属性変更推奨)
📁 フォルダーが空でないと失敗中身があるフォルダーのリネームは可能。ただしファイル単位での移動不可

✅ ファイルの存在確認を組み合わせる例

If Dir("C:\test\old.txt") <> "" Then
If Dir("C:\test\new.txt") = "" Then
Name "C:\test\old.txt" As "C:\test\new.txt"
Else
MsgBox "すでに 'new.txt' が存在します。"
End If
Else
MsgBox "ファイルが存在しません。"
End If

📁 フォルダーのリネーム例(存在確認込み)

If Dir("C:\test\OldFolder", vbDirectory) <> "" Then
If Dir("C:\test\NewFolder", vbDirectory) = "" Then
Name "C:\test\OldFolder" As "C:\test\NewFolder"
End If
End If

🔄 ドライブ間の移動をしたい場合の代替方法

Nameではドライブ間移動ができないため、以下のようにFileSystemObjectを使う必要があります:

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

fso.CopyFile "C:\test\data.txt", "D:\backup\data.txt"
fso.DeleteFile "C:\test\data.txt"

💡 よくある用途と活用例

用途説明
ログファイルのリネーム日付をつけてアーカイブする際など
一時ファイルの正式名称への変更作業後の保存処理など
ファイルを整理して移動同じドライブ内の整理に便利
フォルダーの名前変更プロジェクト名変更など

例:拡張子だけを変更

Name "C:\test\data.tmp" As "C:\test\data.txt"

🧪 応用例:バッチ的にファイル名を変更

Sub RenameMultipleFiles()
Dim i As Integer
For i = 1 To 5
If Dir("C:\test\file" & i & ".txt") <> "" Then
Name "C:\test\file" & i & ".txt" As "C:\test\document" & i & ".txt"
End If
Next i
End Sub

🧠 Name ステートメントと他の方法の比較

操作手段特徴ドライブ跨ぎ上書き開いてるファイル対応
Name軽量・高速・VBA標準❌不可❌不可❌不可(エラー)
FileSystemObject.MoveFile柔軟・再帰・詳細制御可能✅可能✅可❌(ただしエラーハンドリング可能)
Shell+moveコマンドレベルでの移動✅可能△(不安定)

🧩 エラー回避のベストプラクティス

  • Dir関数で存在確認を先に行う
  • すでにファイルが存在していないかを確認
  • エラートラップ(On Error Resume Next)を使って安全性を高める
On Error Resume Next
Name "C:\test\file.txt" As "C:\test\file_old.txt"
If Err.Number <> 0 Then
MsgBox "リネームに失敗:" & Err.Description
End If
On Error GoTo 0

🧾 まとめ

特徴内容
機能ファイル・フォルダの名前変更、同ドライブ内移動
長所シンプルで速い、参照設定不要
短所ドライブ跨ぎ不可、上書き不可、ファイルが開かれているとNG
ベスト用途簡単なリネーム、整理処理、ログ保存など
注意点存在確認+エラー処理を組み合わせて使うこと
タイトルとURLをコピーしました