質問

Excelでスプレッドシートデータを取得して、セル値を変更するだけでなく、VBA内から自分自身を再計算する方法を教えてください

役に立ちましたか?

解決

次の行でトリックを行います:

ActiveSheet.EnableCalculation = False  
ActiveSheet.EnableCalculation = True  

編集: .Calculate()メソッドは、すべての機能で機能するわけではありません。アドイン配列関数を使用してシートでテストしました。私が使用しているプロダクションシートは非常に複雑なので、 .CalculateFull()メソッドをテストしたくありませんが、動作する可能性があります。

他のヒント

これでうまくいくはずです...

'recalculate all open workbooks
Application.Calculate

'recalculate a specific worksheet
Worksheets(1).Calculate

' recalculate a specific range
Worksheets(1).Columns(1).Calculate

Excelが一時中断し、方程式を再適用するためにキックスタートが必要になる場合があります。これは、カスタム式を使用している場合に発生します。

次のスクリプトがあることを確認してください

ActiveSheet.EnableCalculation = True

選択式を再適用します。

Cells(RowA,ColB).Formula = Cells(RowA,ColB).Formula

これは、必要に応じてループできます。

あなたも試してみてください

Application.CalculateFull

または

Application.CalculateFullRebuild

アクティブなワークシートだけでなく、開いているすべてのワークブックを再構築してもかまわない場合。 ( CalculateFullRebuild は依存関係も再構築します。)

VBAで背景画像(ドラフト透かし)をオフにする際に問題が発生しました。私の変更は表示されませんでした( Sheets(1).PageSetup.CenterHeader ="" メソッドを使用して実行された)-更新する方法が必要でした。 ActiveSheet.EnableCalculation アプローチは部分的にトリックを行いましたが、未使用のセルをカバーしませんでした。

最終的に、画像が設定されなくなったときに消えるライナーを1つ使用することで必要なものが見つかりました:-

Application.ScreenUpdating = True

データ接続の更新後、一部のUDFが実行されていませんでした。サブルーチンを使用して、次のように単一の列を再計算しようとしました:

Sheets("mysheet").Columns("D").Calculate

しかし、上記のステートメントは効果がありませんでした。上記の解決策はいずれも役に立たなかったが、式を置き換えるkambeeksの提案は機能し、更新中に手動の再計算がオンになっている場合は高速でした。以下のコードは、OP" kluge"に対する正確な責任がない場合でも、私の問題を解決しました。コメント、ユーザー指定のセルの再計算を強制する高速/信頼性の高いソリューションを提供しました。

Application.Calculation = xlManual
DoEvents
For Each mycell In Sheets("mysheet").Range("D9:D750").Cells
    mycell.Formula = mycell.Formula
Next
DoEvents
Application.Calculation = xlAutomatic
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top