web-dev-qa-db-ja.com

ExcelにVBA内からシートのデータを更新させる

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

47
Lance Roberts

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

ActiveSheet.EnableCalculation = False  
ActiveSheet.EnableCalculation = True  

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

56
Lance Roberts

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

'recalculate all open workbooks
Application.Calculate

'recalculate a specific worksheet
Worksheets(1).Calculate

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

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

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

ActiveSheet.EnableCalculation = True

選択式を再適用します。

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

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

8
kambeeks

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

Application.CalculateFull

または

Application.CalculateFullRebuild

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

6
Dave DuPlantis

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

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

Application.ScreenUpdating = True

3
AjV Jsy

データ接続の更新後、一部の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
0
pghcpa