即効テクニック

ファイル操作関連のテクニック

ファイルをコピー/移動する

(Excel 97/2000/2002/2003/2007)
ファイルをコピーするには、FileCopyステートメントを使います。
次のコードは、C:\Tmp\Test.txtをC:\Workフォルダにコピーします。

Sub Sample1()
  FileCopy "C:\Tmp\Test.txt", "C:\Work\Test.txt"
End Sub
FileCopyステートメントは「FileCopy コピー元,コピー先」と記述します。 「コピー先」にはフォルダ名ではなく、ファイル名を指定する点に留意してください。
Sub Sample1()
  FileCopy "C:\Tmp\Test.txt", "C:\Work\"
End Sub
これではエラーになります。 「コピー先」にファイル名を指定するのですから、次のようにすると同じフォルダ内に、別名でファイルをコピーできます。
Sub Sample2()
  FileCopy "C:\Tmp\Test.txt", "C:\Tmp\Test2.txt"
End Sub
これは「コピー元」ファイルの複製を作るのと同じ操作になります。 次のコードは、C:\Tmpフォルダに存在する「テンプレート.xls」の複製を同じフォルダに10個作ります。
Sub Sample3()
  Dim i As Long
  For i = 1 To 10
    FileCopy "C:\Tmp\テンプレート.xls", "C:\Tmp\Book" & i & ".xls"
  Next i
End Sub
FileCopyステートメントは「コピー先」に、すでに同名ファイルが存在しているとそのファイルを上書きします。 このとき確認は表示されません。 上書きしたくない場合は、次のように確認するといいでしょう。
Sub Sample4()
  If Dir("C:\Work\Test.txt") <> "" Then
    If MsgBox("すでに存在します" & vbCrLf & _
         "上書きしますか?", vbYesNo) = vbNo Then Exit Sub
  Else
    FileCopy "C:\Tmp\Test.txt", "C:\Work\Test.txt"
  End If
End Sub   
ファイルのコピーはFileCopyステートメントですが、VBAにはファイルを移動するための命令は用意されていません。 もっとも、ファイルの名前を変更するNameステートメントを利用するとファイルを他のフォルダに移動できます。 Nameステートメントは「Name 古い名前 As 新しい名前」と記述します。 FileCopyステートメント違い、引数の間はカンマではなくAsです。 このとき「古い名前」「新しい名前」ともに、パス名を指定できますので異なるパスを指定することで、結果的にファイルが移動することになります。 次のコードは、C:\Tmp\Test.txtをC:\Workフォルダに移動します。
Sub Sample5()
  Name "C:\Tmp\Test.txt" As "C:\Work\Test.txt"
End Sub   
Nameステートメントはもともと、ファイルを移動するための命令ではなくファイル名を変更するための命令です。 したがって「新しい名前」のファイルがすでに存在するとエラーになります。 Sub Sample4のように、Dir関数で先に存在確認をするといいでしょう。 なお、次のように、他のドライブに移動することも可能です。
Sub Sample6()
  Name "C:\Tmp\Test.txt" As "D:\Work\Test.txt"
End Sub