• 締切済み

EXCELのVBAでの他EXCELデータ取得&表示

EXCELのVBAを使い、実行したEXCELのシートに他のEXCELから読み込んだデータを取得&表示させたいと思っています。 取り込むEXCELファイルは、フォルダに格納された複数の同フォーマットのデータになります。 指定したフォルダの中の全てのEXCELファイルのデータを読み込んで、 実行したEXCELファイルのシートに複数行書き込んでいくような形になります。 機能として必要なのは以下の通りです。 ・取り込みファイルの保存されたフォルダの選択 ・選択したフォルダ内のファイルを開き、VBA側で設定した箇所のデータを読み込み、それを実行側のシートに出力する。(1ファイルにつき1行表示させる形。読込元と出力先のデータの位置関係は違います。色々入力されているファイルの必要部分だけを抜き出し、一行に出力する感じです) ・フォルダ内の全ファイルに対して同じ処理を繰り返す。(出力先の行は1行ずつ下にずれる) このようなVBAはどのように作ればよろしいでしょうか?

みんなの回答

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

一例です。 選択したフォルダ内の全xlsファイルを開き、開いたシートの1行目を、マクロを書いたBOOKのSheet1に上からコピペします。 Sub Sample01()   Dim myfdr As String, fname As String   Dim ws As Worksheet, wb As Workbook   Dim n As Long   With Application.FileDialog(msoFileDialogFolderPicker)     If .Show = True Then       myfdr = .SelectedItems(1) 'フォルダー取得     End If   End With   Application.ScreenUpdating = False '画面更新を一時停止   Set ws = ThisWorkbook.Sheets("Sheet1") 'このコピー先ブックのSheet1をwsとする。   fname = Dir(myfdr & "\*.xls") 'フォルダ内のExcelブックを検索   Do Until fname = Empty '全て検索     If fname <> ThisWorkbook.Name Then 'ブック名がこのブックの名前でなければ       Set wb = Workbooks.Open(myfdr & "\" & fname) 'そのブックを開きwbとする。       n = n + 1 'ブック数をカウント       wb.ActiveSheet.Rows(1).Copy ws.Rows(n) '1行目をコピペ       wb.Close (False) '保存の有無を聞かずに保存しないで閉じる     End If     fname = Dir 'フォルダ内の次のExcelブックを検索   Loop '繰り返す   Application.ScreenUpdating = True '画面更新一時停止を解除   MsgBox n & "件のブックをコピーしましました。" End Sub

shrimp16g
質問者

お礼

求めていたものにかなり近いものが出来ました。 後は少し変えれば目的が果たせそうです。 ありがとうございました。

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.1

取り込みファイルの保存されたフォルダの選択 ChDir "\aaa\bbb" とか、 選択したフォルダ内のファイルを開き csvbook="ccc.csv" 繰り返すなら、 csvbook=Dir("*.csv") とかで、ファイル名を取得する。当然目的のファイルでなければ次を読み込ませるとか。 Workbooks.Open Filename:=csvbook とか、 VBA側で設定した箇所のデータを読み込み、 set wb1=Workbooks(csvbook) set sh1=wb1.Sheets(1) とかにして、 sh1.Range(データ範囲) をコピーするなり、読み込むなりして、 実行側のシートに出力する set wb2=Workbooks(実行側book名) set sh2=wb2.Sheets(1) とかにして、 sh2.Range(実行側データ範囲) に書き込むなり、貼り付けるなり。 csvbook=Dir() で、つぎのbookへ行くなりのくりかえし。 これでどうでしょう。

関連するQ&A