• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAで後半部分のバグフィックス)

VBAで後半部分のバグフィックス

このQ&Aのポイント
  • VBAで作成した長いプログラムの後半部分のバグフィックスについての質問です。
  • 後半の部分のプログラムを動かすためには、前半の計算を行う必要がありますが、バグの修正に時間がかかっています。
  • 変数が多く使用されている場合、後半部分のプログラムのバグフィックスを行う方法について教えてください。

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

  • ベストアンサー
  • mokey
  • ベストアンサー率100% (3/3)
回答No.1

VBA では、VBと同じ考えなので、簡単にできます。  変数が沢山あると言っていますが、後半で使用する変数をあらかじめセットして、前半 部分をgoto文などで飛ばして,後半の処理に入ればそこだけの処理が行えます。   後半で使用するパラメータを最初にセットしておけば,簡単に確認が行えます。  配列や変数のことが記載されていないので,これ以上のアドバイスは無理ですね。  どんなに長いプログラムでも同じ考えで処理できます。   プログラム処理の常套だと思います。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • FEX2053
  • ベストアンサー率37% (7987/21355)
回答No.3

VBAですよね。 でしたら、変数をワークシート上にいちいち書き出すように プログラムを直して、プログラムを分割すればいいんです。 要はパブリック変数の代わりにワークシートを使うってことです。 Excelは広大なワークシートがありますから、その辺は使い まくっても全然問題なしです。 正常に動作すれば、書き出し、読み取りをコメントアウトして コピペすれば済みます。

全文を見る
すると、全ての回答が全文表示されます。
  • chie65535
  • ベストアンサー率43% (8536/19407)
回答No.2

>前半の計算で行った変数の代入を保持したままでVBAの計算を終了し、 >後半の計算の手前から計算を行うようなことをしたいのですが >このようなことは可能でしょうか? できません。 出来ないので「前半部分で計算をする代わりに、計算済みのデータをファイルから読み出して、変数にセットする」と言うように書き換えます。 まず「後半に入る直前」の部分に「今の変数の内容を、すべてファイルに書き出す」ってプログラムを追加します。 それを実行し、ファイルに書き出すのが実行されたら、プログラムをそこで中断します。 次に「ファイルに書き出すプログラム」を「ファイルから読み出すプログラム」に書き換えます。 書き換えたら、プログラムの先頭に「前半をすっ飛ばして、ファイルから読み出して変数にセットする所に飛ぶ」ように、ジャンプ文を入れます。 これで実行すれば「前半の処理を全部飛ばして、ファイルから変数の値を読む」ので、目的を達成できます。 もし、ファイルから読み込むプログラムを書くのが面倒なら「後半に入る前にプログラムを止めて、変数の値をすべてメモして、前半のプログラムの代わりに、変数に固定の値を代入するプログラムを書く」でも構いません。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • パズルのバグ

     遊び感覚でパズルを作ったのですがバグがあるのです。 (作成する前に気がついたのですが、先に本体のPGをした) プログラム内容は imageが16個あります(4*4) 左上から1、2、3 とindex番号をつけています。 ある場所をクリックすると 縦と横の画像が別の画像に変わります(自分自身も) (すべてが同じ画面になると完成です) そんなPGです。 バグがある(と思われる)のはスタートです。 現在1枚1枚乱数で裏表を決めていますが、この方法だと出来ない(100%)パターンがあるかと思います。 (その代わり65536分の1の確率でいきなり完成します(笑)) このスタートに入れるPGがうまく出来ないのです。 --------- 乱数で数値を決める その数値によりあるPGを実行する(※1) それを*階繰り返す としたのですがうまく出来ません。 ちなみに ※1のPGはパズルで遊ぶときのPGをそのままコピーして変数(indexから別の変数に)を変えたのでバグはないと思います。(多分)

  • エクセルのVBAでオブジェクトの配列変数は使えますか?

    VBですとオブジェクトの配列変数というか、コピーしたときに自動的に配列になってしまいますが、エクセルのVBAの場合でオブジェクトの配列変数は使えますか? なにをしたいかというと、ボタンが多すぎて一つ一つにプログラム定義は面倒、そこで配列にしてまわすことにしたいのですが、エクセルで可能でしょうか。 どなたかお願いします。

  • VBAのパス取得について

    VBAで実行した場所の、下記のパスを取得し C:\aa\bb aaの部分だけを取り出し変数に代入したいです。 どのようにすればaaの部分だけ取得できるでしょうか?

  • Access2000 VBA で変数を次回立ち上げたとき利用するには?

    Access2000でVBAを使用していますが、変数にある値を代入してその値をアプリケーションの再立ち上げ後また利用したいのですが、何かよい方法はありませんか? 説明ではわかりにくいので実際の流れで示します。 Dim DiskNo AS string DiskNo = s459a      's459aというには使用中に変わっていきます。  ここでいったんAccessを終了し、次回使用するとき   変数 DiskNoに最後に代入された値(s459a)を保持している。 こんな使いかたなのですが、方法はどんなやり方でもかまいません。変数の値をを次回も利用するにはどうしたらよいのでしょうか?

  • エクセルVBAでサブルーチンへの変数の配列渡し

    エクセルVBAで、メインで使用してる配列変数(の値)をサブルーチンに渡したいが、どうすればよいでしょうか。(なお、メインプログラムは大きいためこれ以上は書けないのでサブルーチンを使用) よろしくお願いいたします。

  • VBA(メモリ展開)

    プログラム経験があまりないんですが (Excelで作成中) シートに出力しながら処理するのではなく メモリ上に展開してから出力するようにといわれたんですが メモリに展開っていう言葉の意味が自分の思っていることとあってるか自信がないです。変数(配列、構造体)などに値を入れて保持するっていうことだと思っているんですけど。 調べてる途中ですが、アドバイスいただけたら助かります。

  • VBA データ中の出現位置マッチングについて

    お世話になります。 Excel2007 VBAなのですが 列の並び順が違う2つのデータ群A、B、がある時、 Aの並びに習ってBを並べ直す場合、 1つの式のみとか、1度の計算だけとか そんな位で並び順を得ること できますか? それともやっぱ 何回か、列数の文だけ 計算が必要ですか? 何となくですが、 スパッと取得できそうなおぼろげな予感がしてます。 例えば 配列数式の解として 配列で解を得て 配列変数などに格納する… 的なことができそうな気がしているのですが 如何でしょうか? ご至難をお願いします。

  • Excel VBAが徐々に遅くなる

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

  • VBA 変数を使うべき?

    VBA 変数を使うべき? VBAを独学で勉強中のものです。 エクセルVBAでデータが入っている行数分処理を行いたい場合などに ------------------------------------------------ lastRow = cells(rows.count,1).end(xlup).row for i = 1 to lastRow ・・・ next i ------------------------------------------------ などと最終行を変数に代入して使う場合と ------------------------------------------------ for i = 1 to cells(rows.count,1).end(xlup).row ・・・ next i ------------------------------------------------ などと直接for文の中で指定する場合とでは結果は同じと思うのですが 結果以外の部分で見た場合どちらで行うほうがいいのでしょうか?

  • 3次元配列

    初歩的な質問で申し訳ございません、非常に困っています 教えて下さい lotno(1~4,1~4,1~5) の3次元配列を宣言し、計算で求められた値を代入したいのですが どのように記述したらいいのでしょうか? また配列 lotno() はモジュール変数です