- ベストアンサー
VBAでフォルダ内の特定のシートをコピーしてデータを抽出する方法は?
- VBAを使用して、フォルダ内のすべてのファイルから特定のシートをコピーしてデータを抽出する方法を教えてください。
- フォルダ内には20個のファイルがあり、各ファイルには「店舗データ」、「個人データ」、「その他」という3つのシートがあります。
- 集合ファイルにフォルダ内のファイルの「個人データ」シートの特定の情報を抽出して集める方法をVBAで実現したいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
機能分けるとサンプルがあると思います。 ファイル選択ダイアログを使って、複数ファイルを選択する あるフォルダのすべてのブックを対象に処理する 複数ブックのあるシートを1つのブックにコピーする 複数シートのあるセル、行の値を1番左のシートに追記列挙する こんな観点で探してみてはどうでしょうか。 コード例、回答例をよく見ますが試す前に何やっているか目を通すこと。あくまでもサンプルなので。
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17070)
この質問は、回答者にコードを作ってくれと言う、丸投げになっている。ここはコード作成の下請けコーナーではない。アドバイス程度までが本来の趣旨のはず。この質問は、ほしい内容を書いただけで、質問者がVBAのコードを何処まで努力して作ったかは何も書いてない。 >Dim関数とかつかいながやってみてますが、うまく行きません 何処がうまく行かないのか書かないと、読者にわからない。 ーー (1)このフォルダに限ると、あるだけの全ファイルを対象にしても良いようで、またすべてがエクセルブックのようだ。 Googleででも「excel vba フォルダ 全ファイル」で照会すれば http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110_080.html のようなコードが直ぐ見つかる。 ・Dir利用法 ・VBScriptを使う と2方法ある。 後者は For Each File in Folder.Files Fname = File.name でファイル名が捉えられるので、Openして処理をする。 (2)1ブックの中のシート名は For Each sh Worksheetsを使う ーー Sub test01() Dim sh As Worksheet For Each sh In Worksheets MsgBox sh.Name '確認だけ If sh.Name = "個人データ" Then '処理 End If Next End Sub ーー >シート2のデータ(セルはB5:F19)の情報がある行だけ抽出して >情報がある行だけ抽出して とは最終行をとる常套手段がある d = Range("B65536").End(xlUp).Row これを使うようなことの意味か。 ーー >集める事が出来るようなものを作りたいのですが 何処に作るのか このフォルダに作るなら最初のファイルを見つけるループでこのブック名(xとする)だけは飛ばすこと。 XブックのYシートに累積するとして、 そして累積する方法(貼り付けるスタート行を見つけるの)は、各ブックを処理するとき、そのときどきの、XブックのYシートの最終行を d = (XブックY・シート指定).Range("B65536").End(xlUp).Row で求めて、その次以下の行にコピー貼り付けをすると良いと思う。
お礼
回答ありがとうございます。 おっしゃるとおり丸投げな感じの質問になってしまいすみません。 当方初心者のため、本を見ながらだったりネットで調べたりしながら、作成していますが、今ひとつわからないためこのような質問になってしまいました。 せっかくお答えも頂いたのですが、内容を理解して自分なりに組み立てるのには時間がかかりそうなので、とりあえずしばらくは今迄の方法で対処しながら、考えて行きたいと思います。
お礼
回答ありがとうございます。 確かに初心者のため、いろいろ調べてコードとか見てもよくわからないことばかりなので、一度試してどんな働きをするのかを調べるのも参考になりそうですね^^ 貴重な御意見ありがとうございます