- 締切済み
EXCELのVBAでの他EXCELデータ取得&表示
EXCELのVBAを使い、実行したEXCELのシートに他のEXCELから読み込んだデータを取得&表示させたいと思っています。 取り込むEXCELファイルは、フォルダに格納された複数の同フォーマットのデータになります。 指定したフォルダの中の全てのEXCELファイルのデータを読み込んで、 実行したEXCELファイルのシートに複数行書き込んでいくような形になります。 機能として必要なのは以下の通りです。 ・取り込みファイルの保存されたフォルダの選択 ・選択したフォルダ内のファイルを開き、VBA側で設定した箇所のデータを読み込み、それを実行側のシートに出力する。(1ファイルにつき1行表示させる形。読込元と出力先のデータの位置関係は違います。色々入力されているファイルの必要部分だけを抜き出し、一行に出力する感じです) ・フォルダ内の全ファイルに対して同じ処理を繰り返す。(出力先の行は1行ずつ下にずれる) このようなVBAはどのように作ればよろしいでしょうか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- merlionXX
- ベストアンサー率48% (1930/4007)
一例です。 選択したフォルダ内の全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
- okormazd
- ベストアンサー率50% (1224/2412)
取り込みファイルの保存されたフォルダの選択 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へ行くなりのくりかえし。 これでどうでしょう。
お礼
求めていたものにかなり近いものが出来ました。 後は少し変えれば目的が果たせそうです。 ありがとうございました。