時間の経過とともに、膨大な数のExcelワークブックを作成および収集するのは非常に簡単です。同じ変更を加える必要のあるワークブックがたくさんあるとします。たとえば、各ワークブックの各ワークシートのセルA10に格納されている値を変更する必要がある場合があります。

変更するワークブックが数個しかない場合、タスクは非常に簡単です。各ワークブックをロードしてから、それぞれに変更を加えます。変更が必要なワークブックが数百冊ある場合、そのタスクはより手ごわいものになります。

このタスクを1回だけ実行する必要があると予想される場合、最も簡単な解決策は、各ワークブックのパスとファイル名を含むテキストファイルを作成することです(1行に1つのワークブック)。たとえば、次のようなエントリを含むファイルが作成される可能性があります。

c:\myfiles\first workbook.xlsx c:\myfiles\second workbook.xlsx c:\myfiles\third workbook.xlsx

ファイルには、必要な数の行を含めることができます。それは本当に重要ではありません。重要なことは、各行が有効なパスとファイル名であり、ファイルに空白行がないことです。

このようなファイルは、コマンドプロンプトウィンドウを表示し、ブックを含むディレクトリに移動して、次のコマンドを発行することで最も簡単に作成できます。

dir /b > myfilelist.txt

ディレクトリ内の各ファイルは、最終的にmyfilelist.txtファイルになります。無関係なエントリを削除できるように、テキストファイルをテキストエディタにロードしてチェックアウトする必要があります。 (たとえば、myfilelist.txtがリストに表示されます。)また、ファイルの各行の先頭にパス名を追加する必要があります。

ファイルが完成したら、Excelを起動し、マクロを使用してテキストファイルを読み取り、テキストファイルにリストされている各ブックを読み込み、そのブックの各ワークシートをステップ実行し、適切な変更を加えて、ブックを保存できます。次のマクロは、これらのタスクを適切に実行します。

Sub ChangeFiles1()

Dim sFilename As String     Dim wks As Worksheet

Open "c:\myfiles\myfilelist.txt" For Input As #1     Do While Not EOF(1)

Input #1, sFilename  ' Get workbook path and name         Workbooks.Open sFilename

With ActiveWorkbook             For Each wks In .Worksheets                 ' Specify the change to make                 wks.Range("A1").Value = "A1 Changed"

Next         End With

ActiveWorkbook.Close SaveChanges:=True     Loop     Close #1 End Sub

このアプローチは、ブックファイルの単一のバッチを処理するだけでよい場合はうまく機能しますが、将来そのような変更を加える必要があると予想される場合は、はるかに柔軟にすることができます。もちろん、最大の手間は、ファイルのバッチを処理するたびにmyfilelist.txtファイルをまとめることです。マクロが単にディレクトリを使用し、そのディレクトリから各ブックをロードできる場合は、柔軟性が追加されます。

Sub ChangeFiles2()

Dim MyPath As String     Dim MyFile As String     Dim dirName As String     Dim wks As Worksheet

' Change directory path as desired     dirName = "c:\myfiles\"



MyPath = dirName & "*.xlsx"

MyFile = Dir(MyPath)

If MyFile > "" Then MyFile = dirName & MyFile

Do While MyFile <> ""

If Len(MyFile) = 0 Then Exit Do

Workbooks.Open MyFile

With ActiveWorkbook             For Each wks In .Worksheets                 ' Specify the change to make                 wks.Range("A1").Value = "A1 Changed"

Next         End With

ActiveWorkbook.Close SaveChanges:=True

MyFile = Dir         If MyFile > "" Then MyFile = dirName & MyFile     Loop End Sub

このマクロは、dirName変数に指定したディレクトリを使用します。

すべてのワークブックファイル(拡張子は.Xlsxで終わる)が読み込まれ、処理されます。

もう1つのアプローチは、マクロでユーザーにどのディレクトリを処理するかを尋ねさせることです。次のマクロに示す方法で、標準のExcelファイルダイアログボックスを使用してこれを行うことができます。

Public Sub ChangeFiles3()

Dim MyPath As String     Dim MyFile As String     Dim dirName As String

With Application.FileDialog(msoFileDialogFolderPicker)

' Optional: set folder to start in         .InitialFileName = "C:\Excel\"

.Title = "Select the folder to process"

If .Show = True Then             dirName = .SelectedItems(1)

End If     End With

MyPath = dirName & "\*.xlsx"

myFile = Dir(MyPath)

If MyFile > "" Then MyFile = dirName & MyFile

Do While MyFile <> ""

If Len(MyFile) = 0 Then Exit Do

Workbooks.Open MyFile

With ActiveWorkbook             For Each wks In .Worksheets                 ' Specify the change to make                 wks.Range("A1").Value = "A1 Changed"

Next         End With

ActiveWorkbook.Close SaveChanges:=True

MyFile = Dir         If MyFile > "" Then MyFile = dirName & MyFile     Loop End Sub

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(8939)は、Microsoft Excel 2007、2010、2013、2016、2019、およびOffice 365のExcelに適用されます。Excelの古いメニューインターフェイス用のこのヒントのバージョンは、次の場所にあります。