分かりやすく、使いやすく。

ファイルをコピーする方法

スポンサーリンク

Excel VBA でファイルをコピーするには、ファイルシステムオブジェクトの Copy メソッドを使用します。

  1. コピー先のファイルが存在する場合、上書きコピーする方法
  2. コピー先のファイルが存在しない場合のみコピーする方法


コピー先のファイルが存在する場合、上書きコピーする方法

上書きコピー時の書式は次の通りです。

VBA(書式)
1
2
3
4
5
6
7
8
9
'ファイルを上書きでコピーする。
Call ファイルシステムオブジェクト.Copy(コピー元, コピー先)
 
'以下も同じ。
Call ファイルシステムオブジェクト.Copy(コピー元, コピー先, True)
 
'※3つ目の引数は次の通り。
' True:コピー先にファイルがある場合、上書きする。
' false:コピー先にファイルがある場合、エラーを発生させる。 

サンプルコードは次の通りです。

VBA(実行可能なサンプルコード)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Option Explicit
 
Sub test()
    Dim objFileSys
    Dim strFilePathFrom
    Dim strFilePathTo
     
    'ファイルシステムを扱うオブジェクトを作成
    Set objFileSys = CreateObject("Scripting.FileSystemObject")
     
    'コピー元のファイルのパスを指定
    strFilePathFrom = "c:\temp\コピー元.txt"
    strFilePathTo = "c:\temp\コピー先.txt"
     
    'エラー発生時にも処理を続行するよう設定
    On Error Resume Next
     
    'ファイルを上書きコピー
    Call objFileSys.CopyFile(strFilePathFrom, strFilePathTo)
     
    '元ファイルが無いなど、エラーになった場合の処理
    If Err.Number <> 0 Then
      'ここにエラー時の処理を記述
      MsgBox "ファイルコピー時にエラーが発生しました。" & vbNewLine & _
             "エラー番号:" & Err.Number & vbNewLine & _
             "エラー詳細:" & Err.Description
      
      'エラー情報をクリアする。
      Err.Clear
    End If
     
    '「On Error Resume Next」を解除
    On Error GoTo 0
     
    Set objFileSys = Nothing
End Sub 

コピー先のファイルが存在しない場合のみコピーする方法

上書きコピー時の書式は次の通りです。

VBA(書式)
1
2
'コピー先にファイルが存在しない場合のみコピー。ある場合はエラーが発生する。
Call ファイルシステムオブジェクト.Copy(コピー元, コピー先, False)  

サンプルコードは次の通りです。

VBA(実行可能なサンプルコード)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Option Explicit
 
Sub test()
    Dim objFileSys
    Dim strFilePathFrom
    Dim strFilePathTo
     
    'ファイルシステムを扱うオブジェクトを作成
    Set objFileSys = CreateObject("Scripting.FileSystemObject")
     
    'コピー元のファイルのパスを指定
    strFilePathFrom = "c:\temp\コピー元.txt"
    strFilePathTo = "c:\temp\コピー先.txt"
     
    'エラー発生時にも処理を続行するよう設定
    On Error Resume Next
     
    'コピー先に同名のファイルが無い場合のみコピー
    Call objFileSys.CopyFile(strFilePathFrom, strFilePathTo, False)
     
    'コピー先に同名のファイルがある場合や元ファイルが無い等
    'エラーになった場合の処理
    If Err.Number <> 0 Then
      'ここにエラー時の処理を記述
      MsgBox "ファイルコピー時にエラーが発生しました。" & vbNewLine & _
             "エラー番号:" & Err.Number & vbNewLine & _
             "エラー詳細:" & Err.Description
      
      'エラー情報をクリアする。
      Err.Clear
    End If
     
    '「On Error Resume Next」を解除
    On Error GoTo 0
     
    Set objFileSys = Nothing
End Sub 
スポンサーリンク
スポンサーリンク