- ベストアンサー
フォルダ内の全エクセルシートを一括処理する方法
- エクセルのマクロのコードを使用して、あるフォルダ内に入っている全エクセルシートの特定のセルの値を別のエクセルシートに一括で貼り付ける方法を教えてください。
- VBA初心者の方でも実行可能な方法を教えていただけると助かります。
- フォルダ内のエクセルシートが複数ある場合でも、貼り付けるセルを1つずつ下にずらしていきたいです。フォルダの検索から全てのコピーが終了するまでの手順も教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
ひとつごめんなさい、うっかり間違いました。 >マクロで開かせて値を取り出したいブックを保存してある「あるフォルダ」のプロパティを >右クリックして場所をコピーということですが C:\Users\test\Desktop そこに表示されているのはフォルダが「置いてある場所」のパスなので、そこに「あるフォルダ」というフォルダがあるなら、マクロでは次のようにします。 修正版: mypath = "C:\Users\ユーザー名\Desktop\あるフォルダ\" としてください。 失礼しました。 #このようにマクロでは「具体的なファイル名」「具体的なファイルの保存場所」「具体的なシート名」「具体的なセル番地」をイチイチ間違えるとすぐにエラーになります。既に3回目回答を重ねていますが、マクロの本質部分(ブックを拾う、開く、コピーする)にまるで入れずに、「ファイルの保存場所の指定のしかたが分からない」で延々つまづきっぱなしです。 教えてもらったマクロを丸写して実行するしかまだできないときは、こういったあなたの「具体的な名前」をキチンと詳しく正しく情報提供してご相談投稿するようになさってください。 いつまでもいつまでも「あるフォルダ」とか「あるシート」とか「あるセル」とかじゃなく、ですね。 また、丸投げ丸コピーにしても、最低限教わったマクロのそれらの記載が実際の自分のそれと間違っていないか、必ずご自分で確認し必要に応じて修正してから実行してください。
その他の回答 (3)
- K Kazz(@JazzCorp)
- ベストアンサー率31% (549/1751)
'指定されたフォルダ内の全ファイル(ブック)を対象に、特定のシートの特定のセルを1つのシートに集める '特定のシートが存在しないときは、そのブックは無視される Sub SelectFiles() Const xDefaultPath = "D:\tmp" Const xFileSelector = "\*.*xls*" Const xSheetName = "X" Const xDataSheet = "Sheet1" Dim xFolderPath As Variant Dim xFileName As String Dim xSheet As Worksheet Dim xNoData As Boolean Dim xShell As Variant Dim xSh As Worksheet Dim xLast As Long Application.ScreenUpdating = False Application.DisplayAlerts = False xNoData = True Set xShell = CreateObject("Shell.Application") Set xFolderPath = xShell.BrowseForFolder(&O0, "データ(ブック)が存在するフォルダを選択, Please!!", &H1 + &H10, xDefaultPath) If xFolderPath Is Nothing Then Exit Sub xFileName = Dir(xFolderPath.Items.Item.Path & xFileSelector, vbNormal) Do Until xFileName = "" Workbooks.Open xFolderPath.Items.Item.Path & "\" & xFileName For Each xSheet In Worksheets If xSheet.Name = xDataSheet Then Set xSh = ThisWorkbook.Worksheets(xSheetName) xLast = xSh.Cells(xSh.Rows.Count, "F").End(xlUp).Row xSh.Cells(xSh.Rows.Count, "F").End(xlUp).Offset(1).Resize(1, 3).Value _ = Workbooks(xFileName).Worksheets(xDataSheet).Range("A1:C1").Value xNoData = False Exit For End If Next xSheet Workbooks(xFileName).Close False xFileName = Dir() Loop If xNoData = True Then MsgBox ("No Data Found!!") Application.ScreenUpdating = True Application.DisplayAlerts = True Exit Sub End If ThisWorkbook.Worksheets(xSheetName).Select xSh.Cells(xLast + 1, 8).Select Application.ScreenUpdating = True Application.DisplayAlerts = True End Sub
- keithin
- ベストアンサー率66% (5278/7941)
「ここを直しなさい」というのをスルーして何もしなければ、当然正しく動くはずもありません。 説明が分かりにくくて、理解できなかったようでごめんなさい。 アナタのご質問: >あるフォルダ内に入っている全エクセルシートの「sheet1」セルA1、B1、C1にある値を ~~~~~~~~~~~~~~~~~~~~~~~~~ どこにあるのか判りませんが、このフォルダのパスを >mypath = "c:\あるフォルダ\" ’言わずもがなですが正しく記入すること ここに記入しなさいという意味です。 >このコードでデスクトップ上の「あるフォルダ」フォルダのパスコード取得になるのでしょうか。 どうやらパスの調べ方も判らないみたいなので、次の通りにします 1.ウィンドウズの画面上であなたの「あるフォルダ」を右クリックしてプロパティを表示する 2.「場所」としてC:\test といった具合に表示されるのでコピーする 3.「mypath = "c:\あるフォルダ\"」の代わりに「mypath = "c:\test\"」といった具合に修正する 一番最後に「¥」が付いているのを見落としてまた失敗しないよう、気を付けること また間違えないように、「あるフォルダ」はブックを保存してある(マクロで開かせて値を取り出したい)ブックを保存してある方のフォルダのことです。 マクロを付けたブック(値を貼り付ける方のブック)は、最初に回答したようにあなたの最初のご質問に書かれている通り、デスクトップに置いておきます。 値を張り付けて集める「シート」は、ご質問であなたがご自分で書いた通りシート名をXにしておかなきゃいけないので、そこも忘れないように気を付けて下さい。
補足
ご回答ありがとうございます。 ご丁寧にありがとうございますm(__)m パスの調べ方も知らない初心者で恥ずかしい次第です。 アドバイス通り実行いたしましたところ、 「実行時エラー9 インデックスが有効範囲にありません」 と表示されました。 ThisWorkbook.Worksheets("X").Range("F65536").End(xlUp).Offset(1).Resize(1, 3).Value _ = Workbooks(myFile).Worksheets("Sheet1").Range("A1:C1").Value ここの値のどこがが違うことを示すエラーと認識しておりますが、 マクロで開かせて値を取り出したいブックを保存してある方のフォルダ(デスクトップ上にフォルダを作成しました。)に入っている各エクセルシート達sheet1のA1~C1には間違いなく値が入っているため、 コードエラーの原因がわかりません。 フォルダ内の各エクセルのファイル名は特にこの今回のアクションとは無関係でしょうか?? (フォルダ内に入っている各エクセルシート達はばらばらな名前です) また、マクロで開かせて値を取り出したいブックを保存してある「あるフォルダ」のプロパティを 右クリックして場所をコピーということですが C:\Users\test\Desktop デスクトップ上に存在するファイルたちは全て同じ場所(パス)表示になるのでしょうか。 どのように、自分が抽出したいエクセルが入っているフォルダを選んでいるのか不思議です。 (現在デスクトップには1つしかファイルは存在していませんが) 初心者じみたばかりの質問で本当に申し訳ありません。
- keithin
- ベストアンサー率66% (5278/7941)
デスクトップにデータをまとめるためのまとめブックを用意しておく まとめブックを開いてマクロを登録し、実行する。 手順: まとめブックを開く ALT+F11を押す 現れた画面で挿入メニューから標準モジュールを挿入する 現れたシートに下記をコピー貼り付ける sub macro1() dim myPath as string dim myFile as string mypath = "c:\あるフォルダ\" ’言わずもがなですが正しく記入すること myfile = dir(mypath & "*.xls*") do until myfile = "" workbooks.open mypath & myfile thisworkbook.worksheets("X").range("F65536").end(xlup).offset(1).resize(1,3).value _ = workbooks(myfile).worksheets("Sheet1").range("A1:C1").value workbooks(myfile).close false myfile = dir() loop end sub
補足
早速のご回答誠にありがとうございます。 ご教授頂いた通り、そのままコピーし、実行いたしましたが、対象のまとめシート上でマクロ実行したところ何も起きませんでした。 エラー等は特に発生しなかったので、コード自体に間違いはないかと思いますが、原因はなにが想定されますでしょうか? ・デスクトップに保存しているファイル名は「あるフォルダ」にしております。 ・mypath = "c:\あるフォルダ\" このコードでデスクトップ上の「あるフォルダ」フォルダのパスコード取得になるのでしょうか。 お忙しいところ大変恐れ入りますが、ご教授いただけますと幸いです。 何卒よろしくお願いいたします。
お礼
ご回答ありがとうございます。 ご指摘の通り実行した結果、無事成功することが出来ました。 ありがとうございました。 今回、自分の知識が不足している状態で、ただただ教えて下さい、のスタンスでのご質問となって しまい大変申し訳ありませんでした。 それにも関わらず、ご丁寧に、そして迅速に教えて下さり誠に感謝しております。 もっとマクロの基本をしっかり押さえたうえで、実務を実行していきたいと思います。 このたびは本当にありがとうございました。