• ベストアンサー

VBAのプログラムとシートでの計算の速度

 現在、エクセルVBAでマクロを組んでいます。 マクロで算出した値を、セルを指定して、シートに代入しています。シートの代入する理由は、途中の計算結果の確認とエクセル関数を利用し、マクロの簡便化を図りたいためです。  代入した値を基にして、エクセル関数を使った結果の値を、他のセルに表示(代入)していますが、VBAで、その結果の値を、利用しています。  お聞きしたいのは、最初にシートに代入してから、エクセル関数の結果を得られる前に、VBAが、値を取得しないかどうか心配です。  素人考えでは、同じエクセル上で動作しているので、エクセル関数の計算終了後に、VBAが動くと思いますが。どうでしょうか?

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

よほど変なマクロを組んでいない限り(言葉を換えると,あなたが一体全体どんなマクロを組んだのか不明の現状では,確たる解答など出来ません),問題なく計算は進みます。 例: マクロの実行を開始する マクロが所定の最初のセルに値を記入する そのセルを使った数式が計算される マクロは数式の計算結果を取得し,次のステップを実行する と言った具合に進行します。 心配であれば(若しくは勉強のため)マクロを漫然と実行して「うごいたー失敗したー」と一喜一憂するのではなく,VBE画面で「ステップ実行」を行い,マクロが一行ずつ進行する都度マクロの取得しているセルの値が確かに最新の計算結果となっていることを確認しながら「デバッグ」してください。 実際に自分の手を動かしてデバッグしてみて,その上で「何かおかしな結果」が出ていると確かに確認されたときは,具体的なあなたのマクロと具体的なあなたのシートの数式等をキチンと情報提供して,改めてご相談を投稿し直してみてください。

kkzdaisuke
質問者

お礼

深夜のご回答ありがとうございます。 ステップ実行の方法がありました。 エクセル関数は、単純な四則演算です。変数を使った方が計算は速いだろうなと思っていましたが、マクロの流れが、自分でも決定していないので、あとで書きなおすときに参考になるかと思い、シートに値を代入しています。  深夜にもかかわらずご解答ありがとうございました。

その他の回答 (1)

  • prius770c
  • ベストアンサー率35% (91/258)
回答No.2

そのような事はしないはずですが・・・なんだが回りくどい処理してますね。 途中の処理過程を見たいというのは分からなくもないですが、複数の変数を使った方が処理が速いと思いますよ。 たぶん、数百行とか数千行に渡って計算式(関数)を入れていると計算待ちの時間が出てませんか。 文章を読む限りでは、どの程度の複雑さがある計算か分かりませんが3段階に分けて計算されているようなので私なら変数を3つ使ってすべてマクロの中で処理してしまいます。 シートに書き込む処理が無駄に思えてしまうので。 どうしても、途中の値が気になるなら変数の値のみをセルに書き出すというのはありかもしれませんが。 loopやforなどの繰り返し処理を入れて変数の計算をした方がいいと思います。 VBAの中でもワークシート関数を使う事はできますので。

kkzdaisuke
質問者

お礼

 深夜のご解答ありがとうございました。 ステップ実行を試してみます。 変数は、あとで自分でも分からなくなってしまうので、使用を控え気味にしています。  >VBAの中でもワークシート関数を使う事はできますので。 あとで、やり方を調べてみます。 ご解答ありがとうございました。

関連するQ&A

  • VBA 別シートの計算表

    Excelについて。 シートAに、計算表があります。 セルa1に入力した値によって、いくつかのExcel関数を利用して、 セルb1に結果を出力しています。 いつも、手入力でセルa1に値を入力して結果を求めていますが。 今度、シートBに膨大な入力するための数値があるので、VBAで自動化できないかと考えています。 今回の質問は、VBAで記述する際に、シートAの入力セルa1に、シートBの入力値を1つずつ代入していき、結果のセルb1をシートBの入力値の隣に出力していこうと考えています。 シートAのa1に入力値を代入して、すぐに結果b1の値を結果出力セルに代入していいのでしょうか? 計算表(シートA)での計算を時間をおく必要があるのでしょうか?=一旦、他のセルを選択するなど。 よろしくお願いします。 ・計算表での計算時間は、1秒未満です。 ・計算表の計算過程もVBAで書けば済む話ですが、プログラミングには疎いので、計算表をそのまま利用したいと考えています。=入力の代入だけVBAで書いていきたいと思います。 ・その他、アドバイスなどいただければ幸いです。 よろしくお願いします。 Excel2010

  • エクセル自作関数の再計算

    エクセルでVBAを利用して自作関数を作りました。 この関数はシートの値の内容によって異なる結果を返す内容になっています。 で、この関数をセルから呼び出しているのですが、シートの値を変更した時に、もともと用意されている関数なら自動的に再計算されますが、自作関数は再計算されませんでした。 仕方がないので、再計算させたいときには関数を使用しているセルを編集状態にして何も編集せずにenterを押し再計算させています。 これを何かの機能で再計算させる方法を教えてください。よろしくお願いします。

  • EXCEL VBAで複数シート内のセルをまとめて表を作成

    EXCELマクロ(VBA)を教えてください。 なやんでいることは、 目的:シート1からシート5までの表の値をシート6に一覧表を作成させる。 ・シート1からシート5まで シート内の表からセル値をコピーしてマクロで(ボタンか何かで)シート6にシート1からシート5のセル値を貼り付けていくような動作をさせられるようなプログラムをつくりたいです。    表(一覧)を作成させたいので わかる方プログラミングを教えてください。よろしくお願いします。

  • VBAの計算式で値を検出し別シートに貼り付ける

    例でA.xls sheet1に添付のデータがありB.xls sheet1のB列に検索値がありC列に記載のとおりの計算式が入力されています。関数入力はC2セルにの計算式を入力しそれを元にオートフィルでC3以降入力しているが膨大な計算式になりExcelを開いたりするのに処理に時間がかかりすぎる為セルに計算式をいれるのではなくVBAで計算式を入力しオートフィルみたいに連続した計算の値のみを入力したいのですがコードが解る方宜しくお願いします。

  • セルの文字式の計算をVBAで行いたい

    A1のセルに "100+5n" という文字式が入っている状態で VBAにてこのセルの文字式計算を行いB1のセルから順に結果を出力したいと思っています。 "n"は1から順に指定された数まで1づつ増えていくようにし B1のセル:105、C1のセル:110、D1のセル:115 ・・・・ と結果がなるようにしたいのですが、VBAでどのように記述すればいいのか悩んでいます。 VBAを使わずにExcelの関数で計算できるのならそれでもよいと思っています。

  • VBAを使ってシートAの3ヶ所のセルでシートBの計算式を行う。

    シートA    シートB   A B C D     A B C D 1 10 20 30 ()   1 10 20 30 (計算式) 2 10 20 30 () 3 10 20 30 () 4 10 20 30 () (1)シートAのA1,B1,C1をコピーしてシートBのA1,B1,C1に代 入する。D1には計算式が入っているので結果が表示される。 (2)シートD1の計算結果をシートAのD1に代入する。 (3)次はシートAのA2,B2,C2をコピーしてシートBのA1,B1,C1 に代入する。D1には計算式が入っているので結果が表示される。  シートD1の計算結果をシートAのD2に代入する。 (4)上記の動作をシートAのA列のセルに数字がある場合は繰り返し行  う。

  • エクセルVBAでワークシート関数のようにしたい

     例えば、セルA1に日付を入力して、セルB1に関数WEEKDAYが入力されていると、すぐセルA1の値を返してくれますが、これと同じことをVBAで再現したいのですが、可能でしょうか?  マクロやVBAでWEEKDAYを記述しても、「ツール」→「マクロ」→「マクロ」か「VBA」でやらないとA1の値をB1に返せないので、A1に日付を入力した瞬間、B1に値を返したいのですが、よろしくお願いします。

  • VBAの作り方

    Excel VBAについて、質問です。 Sheet1にあるデータにSheet2のデータを計算させたいのですが、Sheet2にあるデータは、Sheet1のデータの1部です。これを、Sheet1の該当するセルの部分に計算させていきたいのですが、該当するセルに結果がついてきません。 これは、VBAで組み込むことは不可能でしょうか。

  • Excel VBA で Cells Range 等で参照しているセルが値か式かを取得するには

    お世話になります。 Excel の VBA でシート内のデータを処理しようとしています。 セルの内容を文字変数に代入して処理し、それを元のセルに戻すのですが、セルが値であれば問題ないのですが、式だった場合、計算結果を文字にして戻してしまいます。つまり式が消えてしまい、値複写と同じ結果になってしまいます。 そこで、セルが式ならばそのまま処理しないでおきたいのですが、セルが値なのか式なのかを取得する方法が分かりません。 ご教授下さいますようお願いいたします。

  • エクセルVBA 他シートのSUM関数結果の反映

    エクセルVBA初心者です。 以下のVBAの記述をお教えいただきたく思います。 かなり検索を行ったのですが、しっくりと理解できませんでした・・。 シート1とシート2があり、シート2における足し算結果をシート1に反映させる、というだけのことなのですが・・ 例えば、シート1のA1セルに「=SUM(シート2!A1:A*)」の結果をマクロで反映させたいのです。 シート2におけるsum関数は、データ数が変動するので仮にA1から「A*」と仮にしていますが、 このことを踏まえた場合のVBAの記述はどのようになるのでしょうか。 お教え下さい、よろしくお願い致します。

専門家に質問してみよう