Excel塾のマクロ講座60回
動画版「マクロ講座」です。
複数ブックのデータを一つのまとめブックのシートにまとめる。
今回は、59回と結果は同じですが、Dir関数を使わずに、特定フォルダのファイルを取得し、まとめシートにデータをまとめます。
使うメソッドは、GetOpenFilenameメソッドです。
Excel ファイル を複数取得します。
(サンプルファイルは、こちらから 60回サンプルデータ)
Sub セル範囲書き出したブックのデータをまとめる()
Dim 支店bk As Workbook, 支店sh As Worksheet
Dim rng As Range, mrow As Long, i As Long, srow As Long
matome.Cells(1, 1).CurrentRegion.Offset(1, 0).Clear
srow = sentaku.Cells(Rows.Count, 1).End(xlUp).Row
' Application.ScreenUpdating = False
For i = 1 To srow
Set 支店bk = Workbooks.Open(Filename:=sentaku.Cells(i, 1).Value)
Set 支店sh = 支店bk.Worksheets(1)
支店sh.Rows(1).Delete
Set rng = 支店sh.UsedRange
mrow = matome.Cells(matome.Rows.Count, 1).End(xlUp).Row + 1
rng.Copy Destination:=matome.Cells(mrow, 1)
支店bk.Close SaveChanges:=False
Next i
' Application.ScreenUpdating = True
End Sub
セル範囲に取得したいファイル名を書き出すマクロ。このマクロでGetOpenFilenameメソッドを使用します。
Sub getfilenames()
Dim filenames As Variant, fn As Variant, i As Long
filenames = Application.GetOpenFilename( _
FileFilter:="Excel ファイル , *.xlsx", MultiSelect:=True)
If Not IsArray(filenames) Then
Exit Sub
End If
i = 1
For Each fn In filenames
sentaku.Cells(i, 1).Value = fn
i = i + 1
Next fn
End Sub
ファイルの選択するためのGetOpenFilenameメソッドの書式と引数の説明
Application.GetOpenFilename(FileFilter, FilterIndex, Title, MultiSelect)
ファイルを開くダイアログをマクロの中で使いたい時に、利用するのが、GetOpenFilenameメソッドです。
親オブジェクトは、 Applicationオブジェクトになります。
| パラメータ | 省略可否 | データ型 | 引数の内容 |
|---|---|---|---|
| FileFilter | 〇 | Variant型 | ファイルの候補(種類)を指定する文字列(ファイルフィルタ文字列)を指定します。省略すると種類は「"すべてのファイル (*.*),*.*"」になります。 |
| FilterIndex | 〇 | Variant型 | 引数「FileFilter」で指定した「ファイルフィルタ文字列,ワイルドカードのペア」において、何番目のペアを既定値とするかを指定します。この引数を省略するか、「ファイルフィルタ文字列,ワイルドカードのペア」のペア数より大きな値を指定すると、1番目の「ファイルフィルタ文字列,ワイルドカードのペア」が規定値となります。 |
| Title | 〇 | Variant型 | [ファイルを開く]ダイアログボックスのタイトルを指定します。これを省略すると、デフォルト”ファイルを開く" になります。 |
| ButtonText | 〇 | Variant型 | Macintoshのみ指定できます。 |
| MultiSelect | 〇 | Variant型 | TrueかFalseを指定します。Trueを指定した場合、複数ファイルを選択できるようになります。 |