目次
目的
複数あるワークブックに対してループ処理を行いたい。
ループの中で各ワークブックのセルの値を取得したい。
ループの中で各ワークブックのセルの値を設定・変更したい。
題材
以下の Excel ファイルをループします。 5 ブック作成してあります。
- book1.xls
- book2.xls
- book3.xls
- book4.xls
- book5.xls
各ワークブックの A1 セルには、別々の文字が入力されています。
下のほうに書いあります「取得方法」では、各ワークブックの A1 セルに入力されている文字を取得するマクロを書いてあります。
下のほうに書いあります「設定方法」では、各ワークブックの A2 セルに新しい値を入力するマクロを書いてあります。
共通の独自関数
下記コードの「ファイルダイアログ_002275()」関数は「取得方法」と「設定方法」のマクロから呼び出す共通の関数です。
この関数ではファイルダイアログというファイルを選択できる画面を表示します。
戻り値は FileDialogSelectedItems オブジェクトというもののようです。この中にファイルダイアログで選択したファイルの情報が入っています。各値の取り出しは「取得方法」と「設定方法」のマクロから行っています。こういったやり方でも良いのかは、はっきりとわかっていません。
Excel VBA のコード:
Function ファイルダイアログ_002275() As FileDialogSelectedItems Dim f As FileDialog 'FileDialog の略 Set f = Application.FileDialog(msoFileDialogFilePicker) With f .AllowMultiSelect = True Dim r As Integer 'result の略 r = .Show 'ファイルを選択して「OK」をクリックすると「-1」が返るようです。「キャンセル」をクリックすると「0」が返るようです。 Debug.Print r Set ファイルダイアログ_002275 = .SelectedItems End With Set f = Nothing End Function
取得方法
Excel VBA のコード:
Sub セル値取得_002275() Dim ss As FileDialogSelectedItems 'SelectedItems の略 Set ss = ファイルダイアログ_002275() Dim s As Variant 'SelectedItem の略 For Each s In ss Debug.Print s Dim b As Workbook 'Workbook の略 Set b = Workbooks.Open(Filename:=s) Debug.Print b.Worksheets(1).Range("A1") 'セル値取得 b.Close 'ワークブックを閉じる Next Set ss = Nothing Set b = Nothing End Sub
上記のコードを実行すると以下のような内容がイミディエイトウィンドウに出力されると思います。
最初に出力されている -1 は「ファイルダイアログ_002275」関数の中で出力されたものです。
-1
C:\xxx\book1.xls
これは book1.xls です。 'book1.xls の A1 に入力されていた文字です。
C:\xxx\book2.xls
これは book2.xls です。 'book2.xls の A1 に入力されていた文字です。
C:\xxx\book3.xls
これは book3.xls です。 'book3.xls の A1 に入力されていた文字です。
C:\xxx\book4.xls
これは book4.xls です。 'book4.xls の A1 に入力されていた文字です。
C:\xxx\book5.xls
これは book5.xls です。 'book5.xls の A1 に入力されていた文字です。
設定方法
Excel VBA のコード:
Sub セル値設定_002275() Dim ss As FileDialogSelectedItems 'SelectedItems の略 Set ss = ファイルダイアログ_002275() Dim s As Variant 'SelectedItem の略 For Each s In ss Debug.Print s Dim b As Workbook 'Workbook の略 Set b = Workbooks.Open(Filename:=s) b.Worksheets(1).Range("A2").Value = b.Name 'セル値設定 'b.Name でワークブックの名前を取得しています。 b.Close SaveChanges:=True '変更を保存してワークブックを閉じる Next Set ss = Nothing Set b = Nothing End Sub
上記のコードを実行すると各ワークブックの A2 セルにワークブックの名前が入力されていると思います。
テスト環境
- Windows 10
- Microsoft Office Excel 2003
間違ってないと良いですが。
以上、閲覧ありがとうございました。