
いつもありがとうございます。
エクセルVBAにて、「同一フォルダ内にある別ファイルの値を、『そのファイルを開かずに』
コピーする」やり方をいろいろ調べているのですが、なかなか思うようにいきません。
現状、こんな感じです。
-----------------------------------------------------------------------
For i = 4 To 2000
Sheets(Lm).Cells(i, 14).FormulaR1C1 = "='[" & Base & ".xls]" & St & "'!RC[24]"
Next i
※変数"Base"には参照したいファイル名、"St"及び"Lm"にはシート名が入っています
-----------------------------------------------------------------------
これで行いたい処理はできているのですが、2000行近くあるため、職場の低CPUな
PCでは処理に時間がかかってしまいます。
これを、(たとえばcopyメソッドなどを使って?)もっと速く処理できる方法はないでしょうか?
以上、ご教示のほど、よろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
sub macro1()
worksheets(Lm).range("N4:N2000").formulaR1C1 = "='c:\フォルダ\[" & base & ".xls] & st & "'!RC[24]"
end sub
などのようにしてみます。
少なくともセルを一個一個嘗め回してその都度外部参照させるようなマクロにしない工夫をしてみると,改善があるかもしれません。
高速化が目的なら,きちんと開いてシンプルにコピーしてきた方がずっと早い事も十分考えられます。実際にマクロを組んで,実験してみて事実を確認してみてください。
またセルを一度に2000個も本当に参照する必要があるのか?といった部分はどうなんでしょうか。
#ご質問に掲示された今のマクロは「閉じたブックを参照する」になっていませんが,てきとーに削って掲示したせいかもしれません?
#閉じたCSVに対して外部参照式で値を取ってこさせる方法はありません。
ご回答ありがとうございました。
上手くいきました。
あとは、「きちんと開いてシンプルにコピー」とどちらが速いかなど
いろいろ実験してみます。
あるがとうございました。
No.3
- 回答日時:
No2の方もおっしゃるように
バックグラウンドでファイル内のデータをひっぱて来ることは可能ですが
この方法はメモリが少ないPCでは逆に遅くなることもあります。
ファイルを開かずに値を持ってくることは不可能です。
2000ものファイルをどの頻度で操作するのでしょうか?
データが多くのファイルに分散してしまう運用を見直したほうが良いです。
一般的な発想ですが
それぞれのファイルでデータを操作したら、その内容を
データベースに蓄積される
集計の際は、データベースから必要な部分を取り出して処理する。
といったことを考えます。
No.1
- 回答日時:
VBAとかEXCELの詳しい使い方は知りませんが…
コンピューター処理の常識で考えると
一つはシートの保存場所を、HDDではなく
RAMディスクやSSDにおくことが効果的じゃないかと思います。
それが予算的にできないのであれば
シートをCSV形式に変換して保存するといった方法で
まったく違う手段でアクセスするほうが高速かもしれません。
一度、その処理中にタスクマネージャーでモニタリングして
CPU負荷とHDDアクセスとメモリー消費などの推移から
速度低下の原因を特定すべきかもしれません。
たとえば最初のアプローチはHDD待ちを解消するもので
後のアプローチは、メモリー消費とCPU負荷に効果があるかもしれません。
ただ、VBAからEXCELのシートをアクセスするより
CSVファイルへのアクセスのほうが、難しいかもしれません。
また必ず高速化できるとも言えません。
(VBAのEXCELシート参照機能が充分に最適化されている場合など)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フォルダ内のexcelファイルを順...
-
EXCEL VBA 指定したファイルが...
-
【マクロ】名前を保存する際に...
-
accessフォルダを移動したらフ...
-
エクセルマクロで不特定なファ...
-
【マクロ】変数に入れるコード...
-
データ参照先が別ファイルの場...
-
エクセルのxls形式からxlsx形式...
-
【Excel VBA】ファイル名が一...
-
秀丸:あらかじめ設定した複数...
-
ファイルの保存場所を変えたら...
-
フォルダ内のブック全部にパス...
-
EXCELマクロを無効にして開く方法
-
必ず最大化されて開きます。
-
【VBA】フォルダ内のファイル全...
-
ファイルを開かずにマクロを実行
-
エクセルVBAで送る操作
-
コンパイルエラー
-
エクセルファイルを開く時、関...
-
エクセル 複数ファイルの一括...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【マクロ】変数に入れるコード...
-
【マクロ】EXCELで読込したCSV...
-
EXCEL VBA 指定したファイルが...
-
【マクロ】名前を保存する際に...
-
フォルダ内のexcelファイルを順...
-
エクセルマクロで不特定なファ...
-
【Excel VBA】ファイル名が一...
-
ファイルを開かずにマクロを実行
-
エクセル 複数ファイルの一括...
-
accessフォルダを移動したらフ...
-
ファイルの保存場所を変えたら...
-
データ参照先が別ファイルの場...
-
VBAでワークブックの名前を変数...
-
EXCELマクロを無効にして開く方法
-
フォルダ内のブック全部にパス...
-
エクセル(マクロ)のファイル...
-
エクセルファイルを開く時、関...
-
秀丸:あらかじめ設定した複数...
-
Excelのマクロでファイルを開く...
-
EXCEL VBAで作成した ファイル...
おすすめ情報