Excel

フォルダ内にあるファイルに同じ処理を繰り返す

2021-05-01

例:フォルダ内のエクセルファイルを開き、セルA1にファイル名を入力し保存して閉じる。

保存先:F:\sample\
エクセルファイルに書き込み後

Do~Loop・フォルダ内にある全てのファイルに対し処理を繰り返す

ファイルがフォルダ内にある限り処理を繰り返す方法です。

Do While (フォルダ内にファイルがある限り)

(繰り返す処理) 

Loop

サンプルコードです。

Sub sample1()
    Const fPath As String = "F:\sample\"
    Dim fName As String
    fName = Dir(fPath & "*.*")
    
    Do While fName <> ""
        Workbooks.Open (fPath & fName)
        With Workbooks(fName)
            Range("A1").Value = fName
            .Close SaveChanges:=True
        End With
        fName = Dir()
    Loop
End Sub
  • 6・13行目:Do While(条件式)~Loopで条件がTrueの間は処理を繰り返します。
  • 8~11行目:繰り返す処理/セルA1にファイル名を入力し、保存して閉じます。

For~Next・シートに書き出したファイル名に対し処理を繰り返す

処理対象のファイル名をシートに書き出す方法です。処理対象のデータを選べるので、大量のデータがある場合はこちらの方法の方が良い場合があります。

Dim i as long

For i = (開始) to  (終了)

(繰り返す処理) 

Next  i

処理したいファイル名をすべてシートに書き出す方法

処理したいファイル名をセルA2以降に書き出します。

処理対象

サンプルコードです。

Sub sample2()
    Const fPath As String = "F:\sample\"
    Dim fName As String
    Dim i As Long
    
    For i = 2 To 4
        fName = Cells(i, 1)
        If Dir(fName) <> "" Then
            Workbooks.Open Filename:=fPath & fName
            With ActiveWorkbook
                .ActiveSheet.Range("A1").Value = fName
                .Close SaveChanges:=True
            End With
        End If
    Next i
End Sub
  • 7行目:シートのセルA2以降のファイル名
  • 8・14行目:「If Dir(fName) <> "" Then...End If」フォルダ内に対象のファイルがある場合に実行します。
  • 9行目:対象ファイルを開きます。
  • 10~13行目:繰り返す処理/セルA1にファイル名を入力し、保存して閉じます。

処理したいファイル名を選択する方法

(1)フォルダ内にあるファイル名をすべて書き出します。

(2)処理したいファイル名を選択します。B列に「1」と入力したファイルに対し処理します。

処理対象

処理後はC列に「済」と表示します。

処理後

サンプルコードです。

Sub sample3()
    Const fPath As String = "F:\sample\"
    Dim fName As String
    Dim i As Long
    
    For i = 2 To 4
        If Cells(i, 2).Value = 1 Then
            fName = Cells(i, 1)
            If Dir(fName) <> "" Then
                Workbooks.Open Filename:=fPath & fName
                With ActiveWorkbook
                    .ActiveSheet.Range("A1").Value = fName
                    .Close SaveChanges:=True
                End With
                Cells(i, 3).Value = "済"
            End If
        End If
    Next i
End Sub
  • 7・17行目:「If Cells(i, 2).Value = 1 Then...End If」対象ファイルのB列に「1」と入力がある場合に処理を実行します。
  • 11~14行目:繰り返す処理/セルA1にファイル名を入力し、保存して閉じます。
  • 15行目:処理したファイルの場合、シートのC列に「済」と表示します。

-Excel
-

© 2021 オフィスのQ&A