人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

ExcelVBAについて質問です。
フォルダ内の複数のExcelファイル(報告〇〇.XLS)があり、各ファイルのセル値を取得して、
集計(集計.XLS)に転記したいと思います。
【取得条件】
・「報告〇〇.XLS」[チケット]シートの[E3]セル値を「集計.XLS」[集計]シートに転記
・「報告〇〇.XLS」[チケット]シートの[C9]?[M9]までのセル値を、上記で取得した値の横に羅列
・フォルダ選択時は選択ダイアログにしたい
【前提条件】
・Excel2003環境で使用
・フォルダ内のファイル数は80個くらいあります。
ソース付の回答を希望します。またよい回答は800ポイント以上差し上げます。

●質問者: japan-nan
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● cx20
●900ポイント ベストアンサー

サンプルを書いてみました。
一応、Excel 2003 と Excel 2007 にて確認しています。

Option Explicit

' 集計表を作成する
Sub MakeSummarySheet()
 Dim strFileNames() As Variant
 Dim strFileName As Variant
 
 Dim nLine As Integer
 
  ' ファイルを開くダイアログを表示
 strFileNames = Application.GetOpenFilename( _
 FileFilter:="Excel ファイル (*.xls),*.xls", _
 MultiSelect:=True)

 nLine = 0
 If IsArray(strFileNames) Then
  ' 複数ファイル数ぶん処理する
 For Each strFileName In strFileNames
 nLine = nLine + 1
  ' 指定ファイルの情報を集計表に追記する
 Call AddSummarySheet(nLine, strFileName)
 Next
 Else
 MsgBox "キャンセルされました"
 End If
 
End Sub

' 指定ファイルの情報を集計表に追記する
Function AddSummarySheet(ByVal nLine As Integer, ByVal strFileName As String)
 Dim book As Workbook
 
  ' 集計対象ファイルをオープン
 Set book = Workbooks.Open(strFileName)
 
  ' 「チケット」シートの E3 を「集計」シートにに転記
 ThisWorkbook.Worksheets("集計").Cells(nLine, 1) = book.Worksheets("チケット").Cells(3, 5)
 
 Dim nColumn
 For nColumn = 1 To 11
  ' 「チケット」シートの C9?M9 を「集計」シートに転記
 ThisWorkbook.Worksheets("集計").Cells(nLine, 1 + nColumn) = book.Worksheets("チケット").Cells(9, 2 + nColumn)
 Next
 
  ' 集計対象ファイルをクローズ
 book.Close
 
End Function
1ABCDEFGHIJKL
22012年6月60016002600360046005600660076008600960106011
32012年7月70017002700370047005700670077008700970107011
42012年8月80018002800380048005800680078008800980108011

cx20さんのコメント
コードは「集計.xls」に追加(VBA 画面より [挿入] - [標準モジュール])お願いします。

japan-nanさんのコメント
回答いただきありがとうございます。 ダイアログ選択はファイル選択するようになってますが、 コードが入った「集計.xls」を選択するのでしょうか?

cx20さんのコメント
「ファイル選択ダイアログ」は「集計.xls」でなく「報告〇〇.xls」を複数選択することを想定してました。 ご希望の動作と違っていたようで、失礼致しました。 「フォルダ選択ダイアログ」がご希望ということでしたら、コメント欄の id:gong1971 さんのサンプルが参考になるかと思います。

2 ● きゃづみぃ
●100ポイント

集計ファイルは
集計ファイル = "C:\test\集計.xls"
ここに パスを記述してください。


Sub main()

集計ファイル = "C:\test\集計.xls"


vntFileName = _
 Application.GetOpenFilename( _
 FileFilter:="エクセルファイル(*.xls),*.xls" _
 , FilterIndex:=1 _
 , Title:="ファイル選択(複数可)" _
 , MultiSelect:=True _
 )

  'ファイルが選択されているとき(vntFileNameが配列型)は
  '選択した全てのファイルをWorkbooks.Openメソッドを使い開きます。
 If IsArray(vntFileName) Then
 Set s = Workbooks.Open(集計ファイル)
 For Each vntGetFileName In vntFileName
 Set h = Workbooks.Open(vntGetFileName)
 k = 0
 If s.Sheets("集計").Cells(1, 1) = "" Then k = 1
 If k = 0 And s.Sheets("集計").Cells(2, 1) = "" Then k = 2
 If k = 0 Then
 k = s.Sheets("集計").Cells(1, 1).End(xlDown).Row + 1
 End If
 
 s.Sheets("集計").Cells(k, 1) = h.Sheets("チケット").Range("E3")
 For c = 1 To 11
 s.Sheets("集計").Cells(k, 1 + c) = h.Sheets("チケット").Cells(9, 2 + c)
 Next c
 
 h.Close
 Next
 s.Save
 s.Close
 
 End If


End Sub

きゃづみぃさんのコメント
あと 集計ファイルには 追記できるようにしてあります。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ