VBAを使って、他のExcelファイルを選定して各ファイル間のデータをやりとりする際には、Workbookの選定”Application.GetOpenFilename()”、Workbookを開き”Workbooks.Open”、アクティブにして”**.Activate”、ワークシートのセル範囲”Worksheets(**).Range(“**”)”を操作してやります。とりあえず、これらのメソッドやプロパティを使えば操作可能です。
Excelファイルを選定するメソッド
Excelファイルを指定する方法で便利な方法がGetOpenFilename()メソッドです。”ファイルを開く”ダイアログボックスを表示して、選択したファイルの絶対パスを取得します。[FileFilter]にはファイルの種類を指定することが出来ますが、記入しないとすべてのファイルが対象になります。
Applicationオブジェクト.GetOpenFilename([FileFilter])
取得した絶対パスを指定してブックを開きます。そのメソッドはOpenメソッドで、つぎのようです。
Workbooksコレクション.Open(Filename)
Workbookの変数にアクティブになっているWorkbookへの参照を代入しておきます。これにより、後でそれぞれのWorkbookをアクティブに切り替えながら操作を行っていきます。
Set オブジェクト変数 = ActiveWorkbook
それぞれのWorkbookをアクティブに切り替えるときは、つぎのActivateメソッドを利用します。
オブジェクト変数.Activate
つぎに示すプロシージャの例では、各sheetの指定は、Worksheets(i).Range(“B2”)やWorksheets(1).Cells(i, 2)等のプロパティを利用しました。
プロシージャの作成例
家計簿を付けたExcelファイルを読み取って、その各月のsheet内のデータを読み、プロシージャが書かれたsheetにデータを書き込んでいくプロシージャを作成してみました。
Option Explicit Dim Thisbook As Workbook 'プロシージャを書いたExcelファイル Dim Kakeibo As Workbook 'データを検索する家計簿を付けたExcelファイル Dim fname As String 'ファイル名 Dim koumoku As String 'コピーするデータ Dim i As Long Sub ブックシート() fname = Application.GetOpenFilename() '家計簿ファイルを指定する If fname = "False" Then 'ファイルをキャンセルされると操作終了 End End If Set Thisbook = ActiveWorkbook 'プロシージャを書いたファイルをThisbookにセット Worksheets(1).Cells.Clear '1番目のsheetのデータをクリア Workbooks.Open fname '家計簿ファイルをオープン Set Kakeibo = ActiveWorkbook '家計簿ファイルをKakeiboにセット For i = 2 To 13 Kakeibo.Activate '家計簿ファイルをアクティブにして koumoku = Worksheets(i).Range("B2") 'セルB2のデータをkoumokuに入力 Thisbook.Activate 'プロシージャファイルをアクティブにして Worksheets(1).Cells(i, 2) = koumoku 'koumokuを書き込む Next End Sub
プロシージャの実行例
このプロシージャが書かれたシートを開いて実行すると、”ファイルを開く”ダイアログボックスが開きますので、ファイルを指定してファイルを開きます。
選んだExcelファイルはR4年家計簿.xslxです。sheetは左から2番目から13番目までに各月の家計簿が記録されています。これらシートの”B2″の文字を読み取って、プロシージャが書かれたExcelファイルの1番目のシート”sheet1”に書き込んでいきます。
その結果は下図のようで、2列目(B列)に書かれたデータから1月から12月のシートを読み取った事が分ります。
ここで取り上げたWorkbookの選定とアクティブ化、それぞれのsheetの選定と読み取り書き込みは、そのまま利用可能です。他にいろんな機能や設定方法、細かい設定もあるかと思いますが、まずコピーして試してみてください。
以上、お役に立てれば幸いです。
コメント