• ベストアンサー

Excel VBAが徐々に遅くなる

エクセルのVBAであるテキストファイルを読み込み、計算してCSVで吐き出すというプログラムを組んでいます。 質問はその計算スピードが徐々に遅くなってしまうということです。 計算し始めは大体1テキストファイルを読み込んでCSVに吐き出すのに1分くらいで済むのですが、3,4時間回してると1テキストファイル⇒CSVに2,30分かかってしまいます。 シートが増えていたりグラフを追加したりはしていません。 また、VBAの変数もできるだけ初期化するようにしてます。 読み込んでいくテキストファイルのサイズもそんなに変わらないです。 何か考えられる原因はないでしょうか? ご教授宜しくお願いします。

  • kikei
  • お礼率70% (82/116)

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 >計算し始めは大体1テキストファイルを読み込んでCSVに吐き出す 「読み込んで」という、この過程に何が使われているのか分かりません。 コードをみないで、本来は、何も言うことも出来ません。しかし、通常、そのような内容の場合は、一切、ワークシートには出さないようにします。すべて、配列の中で処理していきます。 ワークシートに出せば、取り込んだものは、オブジェクトとして働いていますから、ブックの内部に積み下ろしされていないものが残しているような気がします。

kikei
質問者

お礼

ご回答ありがとうございます。 ワークシートに出していたことが原因でした。 本来なら配列ですべて処理できればよいのですが、 複雑すぎて一旦シートに落として処理してました。

その他の回答 (1)

  • stiffels
  • ベストアンサー率34% (25/72)
回答No.1

関数は永久ループさせないでタイマーで繰り返す (関数から抜けない限り内部で使用したメモリが自動開放されない) 使用済み配列は Erase する 使用済みオブジェクトは Nothing を Set する などいろいろと対策はありますが 残念ながらやはりインタープリタ言語なので メモリを完全に管理することはできないようです。。

kikei
質問者

お礼

いろいろ考慮した結果、シートを作成⇒削除を繰り返したことが 原因だったようです。 そこでプログラムを実行してるエクセルとは別のファイルに シートを作成し、処理が終わったらエクセルごと閉じるという プログラムに変えた結果、処理が遅くなることが解消されました。 回答ありがとうございました。

関連するQ&A

  • EXCELのVBAについて教えて下さい。

    VBA初心者です。 EXCEL操作は今まで何度もやっていて大体のことは分るのですが、この度、仕事の関係でマクロ、VBAを初めて使わなくてはいけなくなりました。早速はじめからつまずいています。どうか私にご教授くださればと思います。 やりたいことというのが、 (1)毎日の仕事として、まず、サーバーにあるデータを集計しcsvファイルとして保存します。 (2)そのcsvファイル(ファイル名:今日落としたファイルなら○○050620.csv)を××.xlsというファイルのワークシートにコピーします。 (3)その集計した表をピボットテーブルでさらに分りやすく分別。 (4)そのピボットテーブルからでてきた数字を××.xlsのSheet1の表のあてはまるところに数字をコピーし貼り付けていきます。 それによってグラフができます。 この操作の流れのうち(2)(3)(4)の部分をマクロニ組んでしまいたいのです。なかなかうまくいかないので良い方法を教えてください。ちなみにcsvファイルは毎日の作業なので年月部分のファイル名が毎日の日付が入ります。

  • excel VBA

    昨日VBAをさわり始めた超初心者です。質問ですが、excelからパワーポイントのシート内を削除の仕方と、テキスト追加方法を教えて下さい。パワーポイントは既存であり、テキスト内容はexcelのセル内の文字で、変数に入れることができました。まだまだ無知なので、ご教授下さいますようよろしくお願いします。

  • エクセルのマクロ(VBA?)でデータの取込と保存をしたいのですが?

    エクセルのマクロとVBAの違いもよくわかっていない素人ですが教えていただけると助かります。 ある値段情報AがテキストファイルまたはCSVファイルなどで保存してあり、それを1つずつ読み込み、エクセルのシート上のセルAに表示させる、それをマクロ?(プログラム)で、1つ目より2つ目のほうが高ければ、そのまま高いほうを表示させておき、安いほうは別のテキストファイルに書き込むようなことって可能ですか? つまり、処理するごとに、テキスト(CSV)のファイルからデータの読み込みと書き込みを行うようなことってできますか?もしできるのであれば、そのやり方について詳しく教えてください。詳しいホームページもあれば教えてください。よろしくお願いします。

  • エクセルVBAで複数CSVを抽出、ブックへの出力

    エクセルVBAで複数のCSVファイルからファイル名と 任意のセル8箇所を自作した計算シートに抽出。 別ブックにCSVファイル名 計算結果4種類を出力する。 というvbaを作りたいのですがどうすればよいでしょうか? CSVファイルが1700ほどあり、大変困っています。 申し訳ありませんがご教授願います。 ーーーーーーーーーーーーーーーーーーーーーーーーーーー 詳細 CSV読み込みセル8箇所:B2、D2、F2~P2 自作計算シートへの貼り付け箇所:G3~G10 計算結果セル抽出箇所:C8~F4 出力の理想系は CSVファイル名、計算結果1、2、3、 4の順で file01 ○○ ○○ ○○ ○○ file02 ○○ ○○ ○○ ○○ ・・・ ・・ のようになれば大変嬉しいです。 お力をお貸しください よろしくお願いいたします。

  • VBA で EXCELファイルをインポート

    VBAに詳しい方お助けください。VBAを使用して、データベースをつかってインポート(データベースファイルを開かずにデータの取り込み)を行いたいのですが良く分かりません。データベースは一つはCSVファイル、一つはXLSファイルです。取り込み先のEXCELファイルのSHEET1にCSVファイルのデータベース(SHEET1)、取り込み先のEXCELファイルのSHEET2にXLSファイルファイルのデータベース(SHEET1)とインポートするにはどのようなVBAの記述が必要ですか?色々と調べているのですがうまく行きません。EXCELは2003を使用しています。

  • Excelで、開いたファイルを消したい

    Excel2000ですが、 デスクトップ上に保存したcsvファイルを開く ↓ 作業中のブックにシートを増やしそこに先ほど開いたcsvファイルを貼り付けてシート名を変更 ↓ 開いたcsvファイルを閉じる という作業ですが、VBAマクロにするとどういうプログラムになるのでしょうか?教えてください。

  •  エクセル2000でのVBA作成してほしいです。

     エクセル2000でのVBA作成してほしいです。  上記の通り、エクセルのVBAを作成して頂きたいです。 フォルダの中に約140個のcsv形式のファイルがあります。ファイル名は時間です。例えば、朝の6時00分15秒の場合は、「060015.csv」で、これが、五分置きのファイルで、139個あります。このファイルのB8~B263をエクセルのシート1のC11から、横に左詰めで貼り付けたいのです。今までは、エクセルで、開く→貼り付けたい所を選択→貼り付けでやっていたのですが。自分で、VBAについて勉強できればいいのですが、今まで、プログラミングを触ったことがないのと時間的余裕がなくて困っています。お力を貸して頂ければ幸いです。

  • エクセルVBAに関する二三質問

    いつもお世話になっております。またまたなんですが、みなさんの知恵をお借りしたく、エクセルVBAに関する二三質問 をさせていただきたいと思います。 1.シートの書式は残ってますが、入力規則が全部消えました。原因はなんでしょうか。まったく見当つきません。 2.VBAでセルに対して諸処理を行ってもすぐには変わらず、一回そのセルをダブルクリックして入力状態にして、Enterを押すと正しい結果が出ます。何もしないと、変わらないんです・・・ 3. CSVファイル "山田太郎","1234","56789" がありますが、ブックとして読込む分には、「""」「,」も自動的に取れますが、テキストファイルとしてよむと「""」が自動的にとれないんです、 Replace(tmp(0),chr(15),"") Replace(tmp(1),chr(15),"") Replace(tmp(2),chr(15),"") ・・・ とすると、ただでさえ遅いのに、さらに倍くらい遅くなります。10Mのファイルを読込むのに15分くらいかかります。こんなものでしょうか。 お分かりの範囲でかまいませんので、ぜひご教授願います。

  • エクセルVBAでの変数のスコープ

    基本的なことなのですが、教えて下さい。 当方、PHPやjavascriptを中心にプログラムしてきたのですが、 今回、エクセル+VBAでプログラムすることになり、VBAを勉強しているところなのですが、ちょっと戸惑っています。 いままでは、グローバル変数をなるべく使わないように、プログラミングをしてきたのですが、 VBAの勉強で、参考にしている本のコードは、全てグローバル変数を使っています。 そもそも、エクセルのシート・セルがグローバル変数のようなもの(?)なので、変数のスコープにこだわってもあまり意味がないのかな?とも思います。 エクセル+VBAである程度の規模のプログラムを作る際、 変数のスコープはどのように使い分けるのが良いのでしょうか? すみませんが、ご教授の程、よろしくお願いします。

  • Excel VBAにてCSVファイルを読みたい

    ExcelにてCSVファイルを読んで処理をしたい。 ただし、CSVファイルをExcelでopenすると遅いので、 VBAにてファイルとして読み込みで処理をしたいのですが、 皆さんは、どのように行っていますか? ※CSVファイルは、テキスト区切り→"(ダブルコーテーション)です  テキスト区切り無しであれば、1行読んで、カンマをsplitすれば良いと思いますが。。。。

専門家に質問してみよう