![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
いつもありがとうございます。
エクセル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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】For文を使用し、行をコピーして別シートに貼り付ける方法を教えてください。 4 2022/07/19 09:01
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/01/26 09:50
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/03 11:27
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- グループウェア 一太郎がイントラで開けません。対処方法を知りたいです。 3 2023/04/04 13:30
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCEL VBA 指定したファイルが...
-
エクセルマクロで不特定なファ...
-
【Excel VBA】ファイル名が一...
-
フォルダ内のブック全部にパス...
-
フォルダ内のexcelファイルを順...
-
エクセル 複数ファイルの一括...
-
エクセル(マクロ)のファイル...
-
ファイルを開かずにマクロを実行
-
エクセルのxls形式からxlsx形式...
-
エクセルデータが突然破損します。
-
複数のエクセルファイルに対し...
-
Accessのaccdbファイルを起動で...
-
VBAでワークブックの名前を変数...
-
ファイルの保存場所を変えたら...
-
【VBA】フォルダ内のファイル全...
-
vba初心者です。 質問です。 毎...
-
エクセルファイルを開く時、関...
-
エクセルファイルをHTML化する...
-
データ参照先が別ファイルの場...
-
EXCELが終了できません
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCEL VBA 指定したファイルが...
-
エクセルマクロで不特定なファ...
-
フォルダ内のexcelファイルを順...
-
VBAでワークブックの名前を変数...
-
エクセル(マクロ)のファイル...
-
エクセルのxls形式からxlsx形式...
-
エクセル 複数ファイルの一括...
-
エクセルのシートの数を数えた...
-
【マクロ】名前を保存する際に...
-
【Excel VBA】ファイル名が一...
-
ファイルを開かずにマクロを実行
-
accessフォルダを移動したらフ...
-
フォルダ内のブック全部にパス...
-
vlookup関数の引数を変数で指定...
-
Excel VBA でファイルが開かれ...
-
ファイルの保存場所を変えたら...
-
Accessのaccdbファイルを起動で...
-
リンク切れチェックを行うマクロ
-
エクセルマクロ 異なるファイ...
-
データ参照先が別ファイルの場...
おすすめ情報