• 締切済み

VBAの再計算が反映されない件につきまして

はじめまして。 大変恐れ入りますが、1つお伺いさせてください。 VBAにて計算結果が反映されない事象が発生しています。 コードは下記の通りです。 === Application.Calculation = xlCalculationManual For i = iFR To iTO Step iST Range(iCL) = i 'パラメータ設定 Application.CalculateFullRebuild 変数 = Cells(現在行, 1) '計算結果を変数/セル等に代入 Next === 要は、一旦高速化のために、Manualにしてから 再計算(計算結果がおかしくなるのを防ぐため すべての関係性をリセットした計算) して、任意の値をセルに書き込みます。 しかし、上記のCalculateFullRebuildの計算結果がセルに反映されない事象が発生しています。 おかしいなと思って、デバッグでF8を押しっぱなしにすると、確かに計算されない時があります。 気持ち、CalculateFullRebuildのあとで、F8を押すのを待つと、正しく反映されるようです。 これは高速すぎて、Excelのセル反映が間に合わないために生じる現象なのでしょうか?それとも計算エンジンの問題でしょうか? 正直とても困っています。 どなたか同じ体験をされた方、有識者の方、教えて頂ければ幸いです。 宜しく御願い申し上げます。 追伸:簡単ではりますが、環境を記述させて頂きました。 === Core2Duo、メモリ2GB Excel 2007 SP1のVBA ===

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

Application.CalculateFullRebuild でやるよりも そのシートのEnableCalclationを設定した方が良いでしょう Application.Calculation = xlCalculationManual For i = iFR To iTO Step iST   Range(iCL) = i 'パラメータ設定   'Application.CalculateFullRebuild   ActiveSheet.EnableCaulculation = False   ActiveSheet.EnableCaulculation = True   変数 = Cells(現在行, 1) '計算結果を変数/セル等に代入 Next といった具合で ・・・ Application.CalculateFullRebuild はたぶん非同期で実行されるのではないかと思います なおActiveSheetは他のsheetなどなら適宜修正してください

msgaichi
質問者

補足

すみません、ご回答ありがとうございます! おお、すごい。 実は、非同期は可能性は僕も薄々と疑ってたんです。 ただ、それを記述したドキュメントが探した限り 力不足で見当たらなかったんです。。。 大変お手数ですが、redfox63様はどこでそうお考えになったか、 教えていただければすごくうれしいです。m(_ _)m

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

関連するQ&A

  • エクセルVBAのChangeイベント時の再計算

    掲題の件ですが、VBAにて、 あるセルの値を変更したときに処理を行うChangeイベントについて困っております。 処理速度向上の為、この処理を行う際、再計算の処理を行わないようにしたいのですが、 Application.Calculation = xlCalculationManual を処理の頭に入れても、 Changeイベント発生→再計算処理→再計算を手動にする処理→本処理 となってしまうため、上手くいきません。 何かいい手立てはないものでしょうか。 エクセル2010です。

  • VBA 数式の計算が止まらない

    下記マクロはE列に1~10を記入し、G列に数式で2倍して記入するものです。 数式の計算を事前に止めてる筈ですが、ステップモードで実行し確認すると、全部計算されてます。 Application.Calculation = xlCalculationManual これが効いてないないのです。 なぜでしょうか? Sub Macro1() For i = 1 To 10 Cells(i, "E") = i Next i Application.Calculation = xlCalculationManual For i = 1 To 10 Cells(i, "G").Formula = "=E" & i & "*2" Next i Application.Calculation = xlCalculationAutomatic End Sub

  • VBからExcelファイルを開くときの再計算の解除方法

    VB6.0からExcelファイルを開くときに、 再計算処理が走ってしまい、 大きなファイルの場合とても時間がかかってしまっています。 開く前に、再計算は行わないで開く。 などの設定はできませんか? Dim xlsObj As Excel.Application ' ココに入れてもまだExcelオブジェクトが生成されていないのでエラー //xlsObj.Calculation = xlCalculationManual Set xlsFile = xlsObj.Workbooks.Open(ファイルパス) ' ココに入れたらファイル開いて再計算処理が走ったあとなので、すでに手遅れ。 //xlsObj.Calculation = xlCalculationManual なにかいい案がありましたら、 教えてください。

  • Excelの計算式が反映されない!!

    xpを使っているのですが、 今日、Excelで今まで使っていたファイルを開いて数字を入力したところ 計算式が反映されなくなってしまいました。 1回計算式にカーソルをもっていってEnterを押すと直るのですが、 (例えば計算式の入ったセルでF2を押して計算式を訂正できる状態にしてENTERを押すなど) これではもともと計算式が入っている意味がありません…。 どうにかすると直るものなのでしょうか?

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

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

  • Excelの計算結果が反映されない!

    Excel 2007で「Excelのオプション」画面の左にある「数式」-「計算方法の設定」-「自動」になっていますが、  あるセルに=表紙!AM17を記述すると、正しく対象のセルの数値を取ってきます が、あるセルに同じように書くと、=表紙!AM17が文字として表示され、対象のセル の数値を取ってきません。 セルによって計算されたり、計算されなかったりします。  表示形式をいろいろ変更してみましたが、結果変わらずです。  また、書式コピーやセルのコピーで持ってきて、再度書き直しても結果は同じでした。  どのようにすればセル内の計算式が反映されるようになりますでしょうか。 宜しくお願いします。

  • Excel 2007 VBAで セル内数値の反映が出来ません

    Excel 2007 VBAで セル内数値の反映が出来ません プログラム中に、セルの数値を参照したいのですが、うまく行きません。 下記にて、コピー元セル指定の範囲指定が、+H3 が反映できません。                          ↓  Sheets("会員台帳").Select              Range(Cells(CopymotoRS, 62), Cells(CopymotoRS + H3 - 1, 71)).Select Application.CutCopyMode = False Selection.Copy

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

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

  • VBAを使わず、計算式を使いまわし

    エクセルで勤務表を作っています。 たとえば、B2に出勤時間を、C2に退社時間を入力すると、D2に勤務時間が表示されます。 現在の計算手法は、A1、B1の値を別セルからそれぞれ参照し、計算をし、結果を別セルに表示させます。その結果をC1セルが参照して、C1セルに表示させるような手法をとっています。 ※話を簡単にするための一例です。この程度ならダイレクトにC1に結果を表示させることは簡単ですが、実際にはさまざまな条件があるため、計算はもっと複雑です。 この手法だと、同じ計算式を日にちごとに用意しなければいけません。 計算式がそこそこ複雑なので、毎日分用意すると、メンテナンスやファイルサイズの問題などあまり よろしくないと思っています。 そこで、VBAのFunctionプロシージャのように、計算式は1セットのみで、毎日の出勤、退勤時間を引数で渡して、結果を返すような方法はできないのでしょうか?

  • VBA 別シートの計算表

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

このQ&Aのポイント
  • フォートナイトのロビーからマッチングできない状況が続いています。無線ルーターは、WRC-1167GST2を使用していますが、ネット接続は正常にできています。マッチング時にルーターが干渉している可能性があります。解決方法をご存知の方はいますか?
  • フォートナイトのマッチングに問題が発生しています。問題の原因は無線ルーターのWRC-1167GST2にある可能性があります。ネット接続は正常にできているため、ルーターの干渉が考えられます。解決方法を教えてください。
  • フォートナイトのロビーからマッチングできずに困っています。問題の原因はWRC-1167GST2という無線ルーターにある可能性があります。インターネット接続は正常にできており、ルーターがマッチング時に干渉している可能性が高いです。解決方法を教えてください。
回答を見る