- ベストアンサー
シートを一つのブックにまとめる方法と注意点
- 質問者はマクロを使ってデスクトップの経理フォルダ内のシートを一つのブックにまとめたいと思っています。具体的には、仕入.xlsxと売上.xlsxの2つのシートをまとめ.xlsmにコピーしたいです。
- ただし、質問者が作成したマクロは動作しないため、どこにこのworkbook.pathを配置すべきかわかりません。希望する動作は、まとめ.xlsmのシート1に記載されているファイル名とシート名に該当するシートをまとめ.xlsmにコピーすることです。
- 質問者はみなさまの知恵を借りて、この問題に対する解決策を見つけたいと思っています。どのようなマクロを使用すれば目的を達成できるのか、どこにworkbook.pathを配置すれば良いのか、アイデアをお持ちの方は回答してください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
sub macro1() dim r as long dim myFile as string dim mySheet as string chdrive left(thisworkbook.path, 1) chdir thisworkbook.path for r = 2 to range("A65536").end(xlup).row myfile = thisworkbook.worksheets("Sheet1").cells(r, "A") mysheet = thisworkbook.worksheets("Sheet1").cells(r, "B") workbooks.open filename:=myfile activeworkbook.worksheets(mysheet).copy _ after:=thisworkbook.worksheets(thisworkbook.worksheets.count) workbooks(myfile).close false next r end sub ぐらいで。
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
説明不足で質問の内容がよくわからない。 一般に言って、すでに存在するエクセルデータを規定する(指し示す)のは (1)フォルダへのパスとフォルダ名 (2)ブック名 (3)シート名 (4)Range(セルの範囲)(とびとびの範囲にある場合もありうるに注意) と考えることができる。仮に階層とここでは言おう。 まとめたいデータはどの階層まで同じなのか、バラバラなのかが説明では分りにくい。 ーー また質問者がいう、「まとめ」た結果はどの階層につくるのか。 ーー またデータは、(新シート)1シート内に持ってきたいのだろうが、単純に、前(月)のデータの張り付けた終わりの次行以下に持ってくればよいのか(それを月数分繰り返す)。(たとえば見出し漢字)などは、張りつけられて、まとめ1シート内で繰り返されては困るのか(注意1)。合計値(注意2)などの行はない(生構成データだけ)ほうがよいのか。 (アクセスのデータなどなら一律にデータをため込んで保存し、必要な都度(年)月を指定して対象データとできる。)エクセルでは、普通はこうしない(月ごと別シートに分ける人が多い)が、ここがエクセルの良い点でもあり悪い点でもある。 (注意1)毎月のシートで固定行数なら張り付ける時のセル範囲の上をずらして指定すればよいが。 (注意2)合計値のある業はデータ数で上下する場合が多く、合計の行を探す処理を組み入れないとならないかも。 >経理フォルダを動かすとうまく どういう必要性があって動かすのか。 当面(1年や年度単位とか)固定できない(しない)のか。 今あるブックのパスをVBAで取って、それを使うしかないのでは。 何かブックを開いておいて 標準モジュールに Sub test02() MsgBox ActiveWorkbook.Path End Sub を実行すれば 、開いたそれがドキュメントなら c:\sers\xx\documents とでて、それでパスわかるが、処理モジュールにうまく渡さないといけない。
お礼
毎回 アドバイスありがとうございます。
お礼
できました いろいろありがとうございました。
補足
夜中なのに回答ありがとうございます。 ネットワークドライブ上にある エクセルファイルの中のシートのコピーをためしているところです。 またきます。