アクセス上位ページ
 
最近の更新内容
(2)-b.FSOによるファイル操作A ⇐ [PREV]
[NEXT] ⇒ (2)-d.FSOによるファイルコピー

Excel VBA ≫ 3.FSO - FSOによるファイル操作(2)-c.FSOによるファイル移動

ファイルシステムオブジェクトによるファイル移動

このページでは下表のファイル移動メソッドについて説明します。

    内容 メソッド
    ファイル移動 fso.MoveFile(※1)
    file.Move


    ※1 ・・・ ワイルドカードを使用することで複数のオブジェクトを同時に操作することが可能。
    <使用可能なワイルドカード>
      * (アスタリスク):任意の数(0以上)の文字を表します。
      ? (クエスチョン):任意の1文字を表します。


    <使い分けの判断基準>
  • 複数のファイルを移動する場合
  • fso.MoveFile を使用します。移動元のファイル群を上記ワイルドカードで表現する必要があります。 ワイルドカードで表現できない場合は file.Move でファイルを1つずつ移動させるしかありません。 (⇒ フォルダ内のファイルを1つずつ移動する例
  • 1つのファイルを移動する場合
  • 上記メソッドのどちらを使用しても機能的には同じになりますので、そのときの処理内容により判断します。 通常、処理の途中でファイルオブジェクトを取得済みであれば file.Move、 ファイルオブジェクトを取得していないのであれば fso.MoveFile を使用します。




fso.MoveFile

引数に移動元、移動先のファイルパスを指定してファイルの移動を行います。

  • 【構文】
    fso.MoveFile Source, Destination

引数名 省略 説明
Source × 移動するファイルを表す文字列を指定します。パスの最後の構成要素内ではワイルドカード文字を使用できます。 ファイルパスは絶対パス、相対パスともに指定可能です。
Destination × 引数 Source で指定したファイルの移動先を表す文字列を指定します。ワイルドカード文字は使用できません。 ファイル名まで指定することで、移動したファイルの名前を変更することができます。 ファイルパスは絶対パス、相対パスともに指定可能です。
引数 Source に指定したファイルが存在しない場合、エラーが発生します。また、引数 Destination に指定したファイルが既に存在する場合、エラーが発生します。

  • 1つのファイルを移動する(ファイル名変更なし)
  • 引数 Destination に既存フォルダ名(パスの区切り文字で終わる)を指定します。
    以下の例では vba フォルダ内にある test.txt を backup フォルダ内に移動します。
    Sub test_fs023_01()
        Dim fso         As Object   'ファイルシステムオブジェクト
        Dim strSrc      As String   '移動元
        Dim strDst      As String   '移動先
    
        'メインオブジェクトの生成
        Set fso = CreateObject("Scripting.FileSystemObject")
    
        '移動元ファイルパスの設定
        strSrc = "C:\Users\xxx\Desktop\vba\test.txt"
        '移動先フォルダパスの設定
        strDst = "C:\Users\xxx\Desktop\backup\"
    
        'ファイルの移動
        fso.MoveFile strSrc, strDst
    
        'オブジェクト変数のクリア
        Set fso = Nothing
    End Sub
    

  • 1つのファイルを移動する(ファイル名変更あり)
  • 引数 Destination に移動後のファイル名を指定します。
    以下の例では、vba フォルダ内にある test.txt を backup フォルダ内に移動し、 さらに、ファイル名を test_130817.txt へ変更します。
    Sub test_fs023_02()
        Dim fso         As Object   'ファイルシステムオブジェクト
        Dim strSrc      As String   '移動元
        Dim strDst      As String   '移動先
    
        'メインオブジェクトの生成
        Set fso = CreateObject("Scripting.FileSystemObject")
    
        '移動元ファイルパスの設定
        strSrc = "C:\Users\xxx\Desktop\vba\test.txt"
        '移動先ファイルパスの設定(ファイル名変更)
        strDst = "C:\Users\xxx\Desktop\backup\test_130817.txt"
    
        'ファイルの移動
        fso.MoveFile strSrc, strDst
    
        'オブジェクト変数のクリア
        Set fso = Nothing
    End Sub
    


  • 複数のファイルを1命令で移動する
  • 引数 Sourceワイルドカードを使用して移動したいファイル群を表現します。
    以下の例では、vba フォルダ内にあるテキストファイルをすべて backup フォルダ内へ移動します。
    Sub sample_fs023_03()
        Dim fso         As Object   'ファイルシステムオブジェクト
        Dim strSrc      As String   '移動元
        Dim strDst      As String   '移動先
    
        'メインオブジェクトの生成
        Set fso = CreateObject("Scripting.FileSystemObject")
    
        '移動元ファイルパスの設定
        strSrc = "C:\Users\xxx\Desktop\vba\*.txt"
        '移動先フォルダパスの設定
        strDst = "C:\Users\xxx\Desktop\backup\"
    
        'ファイルの移動
        fso.MoveFile strSrc, strDst
    
        'オブジェクト変数のクリア
        Set fso = Nothing
    End Sub
    

file.Move

ファイルオブジェクト内に移動元のファイルパス情報を持っているので、引数に指定するのは移動先のファイルパスのみです。 その他の使用方法は fso.MoveFile に同じです。

  • 【構文】
    file.Move Destination

引数名 省略 説明
Destination × ファイルの移動先を表す文字列を指定します。ワイルドカード文字は使用できません。 ファイル名まで指定することで、移動したファイルの名前を変更することができます。 ファイルパスは絶対パス、相対パスともに指定可能です。
引数 Destination に指定したファイルが既に存在する場合、エラーが発生します。

  • 1つのファイルを移動する(ファイル名変更なし)
  • 引数 Destination に既存フォルダ名(パスの区切り文字で終わる)を指定します。
    以下の例では vba フォルダ内にある test.txt を backup フォルダ内に移動します。
    Sub test_fs023_04()
        Dim fso         As Object   'ファイルシステムオブジェクト
        Dim fileObj     As Object   'ファイルオブジェクト
    
        'メインオブジェクトの生成
        Set fso = CreateObject("Scripting.FileSystemObject")
    
        'ファイルオブジェクト取得
        Set fileObj = fso.GetFile("C:\Users\xxx\Desktop\vba\test.txt")
    
        'ファイルの移動
        fileObj.Move "C:\Users\xxx\Desktop\backup\"
    
        'オブジェクト変数のクリア
        Set fso = Nothing
        Set fileObj = Nothing
    End Sub
    


  • 1つのファイルを移動する(ファイル名変更あり)
  • 引数 Destination に移動後のファイル名を指定します。
    以下の例では、vba フォルダ内にある test.txt を backup フォルダ内に移動し、 さらに、ファイル名を test_130817.txt へ変更します。
    Sub test_fs023_05()
        Dim fso         As Object   'ファイルシステムオブジェクト
        Dim fileObj     As Object   'ファイルオブジェクト
    
        'メインオブジェクトの生成
        Set fso = CreateObject("Scripting.FileSystemObject")
    
        'ファイルオブジェクト取得
        Set fileObj = fso.GetFile("C:\Users\xxx\Desktop\vba\test.txt")
    
        'ファイルの移動
        fileObj.Move "C:\Users\xxx\Desktop\backup\test_130817.txt"
    
        'オブジェクト変数のクリア
        Set fso = Nothing
        Set fileObj = Nothing
    End Sub
    


  • フォルダ内の複数ファイルを1つずつ移動する
  • 指定されたフォルダ内のファイルのうち、Like 演算子を使用して、あるファイル名パターンにマッチするものだけを移動させる例です。
    以下の例では、ファイル名が"a"と4ケタの数字からなるテキストファイルを backup フォルダへ移動します。

    <補足>
    数値4ケタは2種類のワイルドカード( * および ? )では表現できません。 ? は任意の1文字を表すため "a????.txt" としてしまうと "aaaa.txt" が移動の対象となってしまいます。 このため、Like演算子と数字を表す"#"を使用してファイル名の判定を行っています。
    Sub sample_fs023_06()
        Dim fso         As Object   'ファイルシステムオブジェクト
        Dim folderObj   As Object   'フォルダオブジェクト
        Dim fileObj     As Object   'ファイルオブジェクト
    
        'メインオブジェクトの生成
        Set fso = CreateObject("Scripting.FileSystemObject")
    
        'フォルダオブジェクト取得
        Set folderObj = fso.GetFolder("C:\Users\xxx\Desktop\vba")
    
        For Each fileObj In folderObj.Files
            'ファイル名判定
            If fileObj.Name Like "a####.txt" Then
                'ファイルの移動
                fileObj.Move "C:\Users\xxx\Desktop\backup\"
            End If
        Next
    
        'オブジェクト変数のクリア
        Set fso = Nothing
        Set folderObj = Nothing
        Set fileObj = Nothing
    End Sub
    

    <実行前 - vba フォルダの内容> 実行前のvbaフォルダの内容 <実行前 - backup フォルダの内容> 実行前のbackupフォルダの内容 <sample_fs023_06 実行後 - vba フォルダの内容> sample_fs023_06実行後のvbaフォルダの内容 <sample_fs023_06 実行後 - backup フォルダの内容> sample_fs023_06実行後のbackupフォルダの内容

カテゴリ内ページ



Page
Top