フォルダー名の変更、削除とファイルの削除、保存

書類を作成するとき、古い書類の入ったフォルダーの名前を変えて、新しい書類は決まったフォルダー名に入れたい時があります。

以下の例は、Excelファイルと同階層にフォルダー「test1」「test2」がある場合で、書類を新規に作成する場合、test2は削除、test1をtest2に名前を変更、新規の書類はtest1を作成してこれに入れるというものです。

フォルダーの図

				
Sub test()

    Dim filePath As String
    Dim test1Fol As String
    Dim test2Fol As String
    
    filePath = ThisWorkbook.Path                    'Excelファイルまでのパスを得る
    
    test1Fol = filePath & "¥" & "test1"             'フォルダーtest1の設定
    test2Fol = filePath & "¥" & "test2"             'フォルダーtest2の設定
    
    If Dir(test2Fol, vbDirectory) <> "" Then
        If Dir(test2Fol & "¥") <> "" Then
            Kill (test2Fol & "¥" & "*.*")           'フォルダーtest2内のファイルを削除する
        End If
        RmDir test2Fol                              'フォルダーtest2を削除する
    End If
    
    If Dir(test1Fol, vbDirectory) <> "" Then
        Name test1Fol As test2Fol                   'フォルダーtest1をtest2に名前を変更する
    End If

    MkDir test1Fol
    
    '現在のファイルをExcel1の名前でフォルダーtest1に保存する
    ThisWorkbook.SaveAs Filename:=test1Fol & "¥" & "Excel1"
    
End Sub
				
			

test1Fol = filePath & "¥" & "test1" について
フォルダーの階層は¥で表します。上記だとEXCELファイルのあるフォルダーの下にある、フォルダー「test1」を表します。 (結果的にEXCELファイルと同階層)

If Dir(test2Fol, vbDirectory) <> "" Then について、
Dir関数を使用し、結果が空の文字列でない場合、つまりフォルダー「test2」があった場合に、IF文の内容を実行します。
Dir関数については、下記参照。

If Dir(test2Fol & "\") <> "" Then について、
上と同様に、フォルダー「test2」の中に(下層に)、ファイルがあった場合に、IF文の内容を実行します。

killはファイルやフォルダーの削除を実行するステートメントです。開いているファイルを削除しようとするとエラーとなります。
ここで、*.*は、.の前の*はファイル名、後は拡張子の部分で、*はワイルドカードと言い、任意の文字列を表します。

Nameはファイルまたはフォルダの名前を変更するステートメントです。ドライブが変わる場合は移動となります。また、開いているファイルやフォルダーについてNameを実行するとエラーとなります。

RmDirはフォルダーを削除するステートメントです。フォルダー内にファイルがあるとエラーとなります。

MkDirはフォルダーを作成するステートメントです。

Dir関数

(以下Helpより)-----

指定したパターンやファイル属性と一致するファイルまたはフォルダの名前を表す文字列型 (String) の値を返します。ドライブのボリューム ラベルも取得できます。

構文

Dir[(pathname[, attributes])]

Dir関数の構文は、次の指定項目から構成されます。

指定項目内容
pathname省略可能です。ファイル名を表す文字列式を指定します。フォルダ名およびドライブ名も含めて指定できます。引数 pathname に指定した内容が見つからないときは、長さ 0 の文字列 (" ") を返します。
attributes省略可能です。取得するファイルが持つ属性の値の合計を表す数式または定数を指定します。省略すると、標準ファイルの属性になります。

設定値
引数 attributes の設定値は次のとおりです。

定数目内容
vbNormal0標準ファイル
vbReadOnly1読み取り専用ファイル
vbHidden2隠しファイル
vbSystem4システム ファイル。Macintosh では使用できません。
vbVolume8ボリューム ラベル。この値を指定すると、すべての属性は無効になります。Macintosh では使用できません。
vbDirectory16フォルダ
vbAlias64エイリアス ファイル。Macintosh でのみ使用できます。

解説
フォルダ内のすべてのファイルに対して繰り返して処理を実行する場合は、引数を指定せずにDir を実行してください。
Dir("")

Dir 関数を最初に呼び出すとき、引数 pathname を指定しないとエラーになります。またファイル属性 (引数 attributes) を指定する場合にも、引数 pathname を指定する必要があります。

Dir 関数は、引数 pathname と一致する最初のファイル名を返します。それ以外のファイル名で引数 pathname と一致するファイル名を取得するには、引数を指定せずに再び Dir 関数を呼び出してください。 一致するファイル名がない場合は、Dir 関数は長さ 0 の文字列を返します。長さ 0 の文字列が返された場合は、次に Dir 関数を呼び出すときに引数 pathname を再び指定しなければなりません。指定しないとエラーが発生します。 現在の引数 pathname と一致するファイル名をすべて取得していなくても、途中で引数 pathname の指定を変更できます。ただし、Dir 関数を再帰的に呼び出すことはできません。vbDirectory 属性を指定して Dir 関数を続けて呼び出しても、連続する下位レベルのサブフォルダは返しません。

-----(以上Helpより)

Excel VBAのチップス一覧へ戻る

ツイート
このエントリーをはてなブックマークに追加
inserted by FC2 system