🔧 基本構文
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 |
| ベスト用途 | 簡単なリネーム、整理処理、ログ保存など |
| 注意点 | 存在確認+エラー処理を組み合わせて使うこと |
