- ベストアンサー
数式の転記についての質問
- 数式の転記について、複数のブックの複数のシートに同じ数式を自動的に入力する方法を知りたい。
- 複数のブックのシートに同じ数式を入力するための効果的な方法を教えてください。
- マクロを使用して数式を自動転記する方法やアドバイスを教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#1です。 そういうことなら簡単に出来ます。 ダミーブックに書いたものをコピーで良いので。 こんな感じに変更すれば良いのではないでしょうか? Sub test() Application.ScreenUpdating = False Dim fn Dim i As Integer, j As Integer ThisWorkbook.Sheets(1).Range("D3:D150").Copy ChDir "C:\" fn = Dir("C:\*.xls") Do Until fn = "" Workbooks.Open Filename:=fn i = Worksheets.Count ReDim Sheetcount(1 To i) For j = 1 To i ActiveWorkbook.Sheets(j).Range("D3").PasteSpecial Next ActiveWorkbook.Close True fn = Dir() Loop End Sub もし全部同じ式ならば、コピーの部分を ThisWorkbook.Sheets(1).Range("D3").Copy ActiveWorkbook.Sheets(j).Range("D3:D150").PasteSpecial に変えて、数式はダミーブックのD3に入れます。 いかがでしょうか? こういうことも出来たらいいなぁ、って考えるのって、すごく素敵なことだと思います! あたしもまだまだ勉強中だけど、頑張りましょう♪
その他の回答 (2)
- -yellowtail-
- ベストアンサー率65% (43/66)
うーん…。ちょっと難しそうです。 まず、開かずにコピーは多分無理です。 (少なくともあたしには分かりません…) 処理が遅いのは性能の問題でないなら、ファイルが重くて時間がかかってるのかもしれませんね。 一挙にやるのではなくて、フォルダの中のファイルをいくつかに分けて、ちょっとずつやってみるのはどうですか? 処理が終わったら戻せばいいので。 あまり関係ないとは思いますが、 ActiveWorkbook.Close True の直前に Application.CutCopyMode = False という文を入れてみるのはどうでしょうか? うーん、ちょっとこれ以上お役に立てなそうです。 すみません(><)頑張ってください!
お礼
ようやく実務で使える程度の体裁でマクロ入りのエクセルシートを完成できました。ご丁寧にお教えいただき深く感謝いたします。 処理速度の問題は依然残るものの、手作業でやることに比べれば1000倍ましです。またご縁があれば色々と教えていただくこともあろうかと思いますが、よろしくお願い致します。本当にありがとうございました。
- -yellowtail-
- ベストアンサー率65% (43/66)
同じ数式を書き込むでいいのかな? ダミーブックを作って、下のモジュールを作ってみてください。 Sub test() Application.ScreenUpdating = False Dim fn Dim i As Integer, j As Integer ChDir "C:\" fn = Dir("C:\*.xls") Do Until fn = "" Workbooks.Open Filename:=fn i = Worksheets.Count ReDim Sheetcount(1 To i) For j = 1 To i Sheets(j).Range("D3:D150").FormulaR1C1 = "=R[-1]C[3]+1" Next ActiveWorkbook.Close True fn = Dir() Loop End Sub ただ、どれかのブックに書いたら、全部に反映みたいな感じを行いたいなら、難しいかと思います。 モジュールの分からないとこは調べてみてください★
補足
ちょっと時間がかかりましたが、とりあえずテスト版ではできました。感激です!早速実際のもので試して見ます。 ところで、「ただ、どれかのブックに書いたら、全部に反映みたいな感じを行いたいなら、難しいかと思います。」との事ですが、ダミーブックに書いた数式がそのまま頂いたモジュールに反映されるようなマクロは出来るのでしょうか?例えば、Sheets(j).Range("D3:D150").FormulaR1C1 = "=R[-1]C[3]+1" の中の=R[-1]C[3]+1の部分に常にダミーブックのSheet1 D3にある数式が反映されるということです。これが出来るといちいちマクロを書き直さずにエクセルのシート上で全ての作業が完結します。(ここまで来るとちょっと欲が出てきてしまってすみません。)追加で申し訳ありませんが、出来る出来ないを含めてお教え頂ければ幸いです。
補足
とても時間がかかりましたが、半分だけ成功しました。というのは、あまりに動作が重くてPCが何度もフリーズしてしまったのです。処理を見ているとどうもWorkbooks.Openの部分で時間がとられているようで、また一度処理したWorkbooksが閉じられずに開きっぱなしでいくつか残っていることもあります。処理スピードを上げるにはどうすればいいでしょうか?Workbooks.Openをしないでこの処理を行うことは可能でしょうか?あともう一息なので、何とかしたいです。是非ご助力をお願い致します。