目次

目的

複数あるワークブックに対してループ処理を行いたい。

ループの中で各ワークブックのセルの値を取得したい。

ループの中で各ワークブックのセルの値を設定・変更したい。

目次まで戻る

題材

以下の Excel ファイルをループします。 5 ブック作成してあります。

  • book1.xls
  • book2.xls
  • book3.xls
  • book4.xls
  • book5.xls

各ワークブックの A1 セルには、別々の文字が入力されています。

各ワークブックの 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

間違ってないと良いですが。

以上、閲覧ありがとうございました。

目次まで戻る

同じカテゴリの投稿(Excel VBA)

前後の投稿