「Excel/VBA/関数がたくさんのシートでVBA動かすとすげー遅いって気づいたよびっくりだよほんと!!」の編集履歴(バックアップ)一覧に戻る
Excel/VBA/関数がたくさんのシートでVBA動かすとすげー遅いって気づいたよびっくりだよほんと!! - (2007/02/09 (金) 13:49:25) のソース
ExcelじゃなくてAccessでやったほうが絶対いいよって思うようなことを頼まれることもしばしば。comです。 別にAccessフリークだからってことじゃないの、ExcelのVBAには限界があるってだけ。 でもまあ大体皆さん新しいソフトは使いたくないとかいって既存のものでやりたがるんだ。 どうしてもExcelで!なんていわれたら、VBAの動きが遅い時にこれを試してみて。 #contents **VBA高速化プロジェクト VBAを実行する前に関数の計算方法を手動にしておくと処理速ーいになるの。 [[Excel]]のシートのセルに関数がたくさん設定されてたとするじゃありませんか。 そのシートに値を書き込んでいくようなVBAを組むとするじゃありませんか。 しかもその書き込んだ値で関数で合計とか出してるとするじゃないですか。 そんな状況でそのVBAを動かすと、実行中の関数の再計算でえらい処理時間が遅くなっちゃうの。 あらびっくり。 ためしに関数の入ってないシートと比べると途中でトイレ行って帰ってきてもまだ終わらないVBAとまばたきひとつしたくらいで終了しちゃうのくらいの違いがあるの。 **関数の計算方法を切り替えてみて 具体的に何をするかというと VBAを実行する前に、メニューの「ツール」→「オプション」の「計算方法」タブの[計算方法]を手動にしておくといいの。 でもVBA実行し終わったら元に戻しておかないと関数の入ったセルが計算しないのでこれは面倒。 てなわけでVBA自体に組み込んでみたらどうでしょう? -VBAの最初に (w_calをdimしときましょ。 '変数w_calの中に今のアナタのExcelソフトで設定されている計算方法を退避しておきます。 w_cal = Application.Calculation 'アナタのExcelソフトの計算方法を「手動」に変更します。 Application.Calculation = xlManual -VBAの最後に 'VBAの最初に変数w_calに入れたアナタのExcelソフトの状態に戻します。 Application.Calculation = w_cal この3行の文をいれておけば大丈夫。 xlManualってのが手動ってことです。 w_calに退避したのはVBAを使うPCの持ち主が「テーブル以外手動」とかマニアックな設定がお好きな場合もあるから。モトの状態に戻しておけば再計算がみょーな動きしてるとか困惑することもないです。 問題はこの文章を入れたVBAがエラーになったときや途中にExit Subなんてあったとき。 最後の文を実行しないと最初に手動にしたままになっちゃうから「あれえ?」てことになる恐れが。 Exit Subの前とかに最後の文を入れていくってのもテ。 ちなみにF9を押すと関数は再計算してくれるのよ。 comったら前置き長すぎとかタイトル長すぎとか脱線しすぎとか改行しろよなんてメールはお受けしておりません。てかこれブログなんだからメールじゃなくてコメントでよろしく♪ 語尾の音符がうさんくさいとかいうコメントも却下!