• ベストアンサー

異なるモードによるマクロ作動速度の差異について

ExcelのVBAのマクロですが、デバックモードではマクロの実行速度が速く、実行モードではかなり遅くなる現象についての質問です。 速度比は1:5-1:10程度です。 速度比を1:1程度にする方法を教えていただきたい。 マクロは、Xp-2003で作りW7-2007で作動させております。 マクロにて、Openしたり、Saveしたりするファイルは[.xls]です。 また関係ファイルには、マクロ実行用のコントロールボタンが多々あります。 Openしたり、Saveしたりするファイルも同様です。 何かの時、ボタンの表示形式が影響しているとういうことを聞いた気がします。

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

  • ベストアンサー
回答No.1

まず、デバッグモードと実行モードとはどう違うんでしょうか? わからないの私だけかもしれないですが・・・・^^; 速度差が、OSとExcelのバージョンが異なることで発生するのか、 同じ環境で、デバッグモードと実行モードによって発生するのか、 ちょっと曖昧ですので、補足ください。 以下で、Excel2003とExcel2007での速度差を検証されています。 ご覧になりましたか? http://excel.syogyoumujou.com/vba/speed_up_12.html その他にも「VBA 高速化」などで検索すると、いろいろ出てくるようですよ。

YON56
質問者

お礼

早速のご回答ありがとうございます。 「VBA 高速化」をインターネットで調べても、 こういうものは見つかりませんでした。

YON56
質問者

補足

OSとExcelのバージョンが異なることで発生するのか---不明 但し、別のマクロは正常に作動します。 PCを変えて実行しても状況は同じです。 2003で実行すれば問題なし。 提案されたサイト等、構文ではないと思います。

その他の回答 (1)

  • dogs_cats
  • ベストアンサー率38% (278/717)
回答No.2

PC環境もバージョンも変われば、処理速度が違ってもおかしくはないでしょう。 2003と2007のソフトの立ち上がり時間も違うはずだと思います。 同じ処理時間になる事はあり得ないと思いますが、VBAを繰り返し実行する場合、同じ処理時間とは限りませんよね。 2007の処理速度を上げたいのが趣旨のようですので、コードを記載して、処理速度が向上する方法があるのか再質問された方が得策ではありませんか。

YON56
質問者

お礼

ご回答ありがとうございます。 コードを記載したいのはやまやまですが、長すぎて記載不可 2007の処理速度を上げたいのはそのとおりですが、 デバックモードと実行モードのモード差による作動速度の違いを 正しく認識しておきたいのです。

関連するQ&A

  • VBA_マクロ内でマクロ実行

    独学でVBAをやってる初心者です。 よろしくお願いします。 EXCEL2003を使ってます。 例) <A.xlsファイル> Sub File_A () Workbooks.Open Filename:="B" Call File_B Range("A1").Select Selection.Paste End Sub <B.xlsファイル> Sub File_B () Range("A2:T5").Select Selection.Copy End Sub A.xlsファイルを開きマクロFile_Aを実行させると B.xlsファイルのマクロFile_Bを実行することができません。 どうしたらうまく実行できますか? 教えてください。

  • マクロを登録したボタンの表示を変更するマクロ

    かなり難易度が高いと思いますが、Excelのマクロでこんなことできませんか? Excelのボタン(表示名:ファイル取り込み)にあるマクロを登録し、このマクロを実行するとファイル選択ウインドウが開き、ここでフルパス指定(仮にc:\aaa\bbb.xls)であるファイルを選択する。 すると、ボタンの表示が”参照ファイル”に変わり、参照ファイルをクリックするとc:\aaa\bbb.xlsが別Windowオープンになる。

  • EXCEL:ファイルを閉じるマクロ

    ファイルA.xlsにファイルB.xlsを開くマクロを作りました。 今度はファイルB.xlsにBを閉じるマクロを作りたいのです。 どうやったらいいのでしょうか? そのマクロは実行ボタンを作ってクリックしたら開く・閉じるをするようにしたいです。 よろしくお願いします。

  • Office2007のマクロ実行について

    Office2007のマクロ実行について ユーザー登録以前にはマクロ実行は出来ないのでしょうか? アップグレードを入れて2007を使おうとしました。 ユーザー登録をするのはよいのですが、後でも出来るのでとりあえず使って見ようとしました。 しかし、Excel2003で作ったマクロの入っているxlsファイルをExcel2007のマシンに入れたところ、一般機能は普通に出来るのですが、マクロを登録したボタンをクリックしても反応しません。また、ファイルオープン時にマクロを実行するかどうかも聞いてきません。 もしかすると、ユーザー登録以前にはマクロの実行は出来ないのかと思いました。 ご存知の方お教えください。

  • xltから開いたファイルのマクロを実行したい

    "a.xls"のマクロから"b.xlt"のファイルを開くと"b1"(拡張子無し)の ファイルが開きますよね。 "b.xlt"にはauto_openのマクロが入っているのですが、この開き方では、 auto_openが実行されません。 そこで "Application.Run "b!auto_open" としてみても "Application.Run "b.xls!auto_open"としてみても、auto_openは実行されません。 一度保存しないと、xltから開いたファイルのマクロを走らせる事は不可能でしょうか?

  • エクセルのマクロで作成した関数を他のエクセルのファイルから参照できるのですか?

    エクセルVBAに関して質問です。 a.xlsというファイルに複数のシートがあり すべてのシートにあるデータと「計算」ボタンがあります。 「計算」ボタンを押下すると、マクロが実行され 計算結果が同じシートに表示されます。 データの内容はシートごとに違いますが、 「計算」ボタンで呼び出したいマクロはすべて同じです。 この「計算」ボタンを押すと実行されるマクロを b.xlsに記述したいのですが、 (他のエクセルのファイルにも使いまわしたいので) そのようなことは可能なのでしょうか。 またどのようにマクロを記述すればこのマクロを 呼び出すことができるのでしょうか。 分かりにくい文章で申し訳ございませんが ご教授くださるとうれしいです。

  • エクセル:シートを保存するマクロ

    あるエクセルファイルFile.xls内に、4つのシートSheet1,Sheet2,Sheet3,Sheet4があるとして、 4つのシートを個別にcsvファイルとして保存するようなマクロを作りたいです。 ▼ソースです  (ここまでのコードで、Pathに保存先のディレクトリ名を取得する部分があるとお考えください)  Filename = "Sheet1" '保存するシート名は、Sheet1~4 GoSub Save1 Filename = "Sheet2" GoSub Save1 Filename = "Sheet3" GoSub Save1 Filename = "Sheet4" GoSub Save1 '保存完了後は、File.xls内Sheet1のCells(4, 1)にカーソルを配置。 Sheets("Sheet1").Select Cells(4, 1).Select Exit Sub Save1: Sheets(Filename).Select fname = Path & "\" & Filename & ".csv" ActiveWorkbook.SaveAs Filename:=fname, FileFormat:=xlCSV, CreateBackup:=False Return End Sub 以上のソースで実行すると、 指定したディレクトリにsheet1.csv、sheet2.csv、sheet3.csv、sheet4.csvの4ファイルができます。 ここまでは問題ないのですが、 マクロを実行後、Sheet4.csv(最後に保存したファイル)が開かれた状態になってしまいます。 しかも、ファイル名はSheet4.csvなのに、シートSheet1~4を持っている状態です。 普通にSheet4.csvファイルを開くと、シートはSheet4しかありません。 状態が伝わるでしょうか? File.xlsのマクロを実行しているので、実行完了後もFile.xlsを開いておきたいのですが、 どのような記述を加えればよいでしょうか? マクロ(VBA)は使い始めたばかりなので説明されても理解できないかもしれませんが、 できればよろしくお願いいたします。

  • VBA マクロ付きExcelファイルを無効で開く

    タイトルの通り、マクロを含むExcelファイルを、マクロ無効でオープンしたいのですが、そういうことは出来るでしょうか? 新規ファイル作成.xlsというマクロがあって、temp.xlsというマクロを含んだファイルをnew.xlsというファイル名でコピーし、それをオープンしてデータを追加して終了。 次にそのnew.xlsをオープンした時にはtemp.xlsに含まれるマクロが実行される・・・ というようなことをしたいと思っています。 もしくは新規ファイル作成.xlsのマクロから、直接new.xlsのファイルにコーディングが可能であれば、それでも良いのですが・・・ データベースから表を作成し、作成後の変更データを再度データベースへ戻す、ということがやりたいのですが、上記の方法しか思いつきません。 もし上記の方法が出来ない場合は、別の方法がありますでしょうか? どなたかアドバイス、よろしくお願いします。

  • シート単体の時のみマクロを有効に。

    メニュー画面となる「menu.xls」ファイルと、コードごとの管理の為の「コード.xls」ファイルがあります。 「menu.xls」はシート「メニュー」・「リスト」・「フォーマット」の構成で、この「フォーマット」シートにコードの名前をつけて保存したものが、「コード.xls」となっています。 「フォーマット」シートにはいくつかのVBAを施してあるんですが、これを 「menu.xls」として開くときには実行させず(無効化)、「コード.xls」として開くときには実行(有効化)させたいのです。 現在、「コード.xls」としてシート「フォーマット」を開いた時はマクロがWorkbook_Openで動作してくれて構わないのですが、「menu.xls」として開いた時もシート「フォーマット」のWorkbook_Openが動作してしまい、エラーが出てきてしまいます。 「フォーマット」シートに実行判定を付ければいいのでしょうか? どうしたらいいか全くわかりませんので、ご教授頂きたくお願い申し上げます。

  • エクセルのマクロで

    いつもお世話になっております。 エクセル2000ですが、 別のファイルを開いて、そのファイル上で マクロを実行させるときは、 orkbooks.Open Filename:= _   "◆◆◆.xls" '以下実行させるマクロの記述 '(例)◆◆◆上に、データをペーストとか としていますが、 ◆◆◆を別の作業で開いたままですと、 当然この上記マクロが動いてくれなくなってしまいます。 そこで、 1:◆◆◆が開いているかどうか判定する。 2:開いていれば◆◆◆をアクティブにしてマクロ実行 3:開いていなければ、◆◆◆を開いてマクロ実行  とするためには、 どのように記述したらよろしいでしょうか? わかりづらければ、補足しますので、 よろしくお願いします。