- ベストアンサー
手動計算時の条件付書式判定とは?
- 手動計算時の条件付書式判定とは、Excelのセルの値が特定の条件を満たす場合に、セルの書式(背景色や文字色など)を自動的に変更する機能のことです。
- 具体的には、条件付書式を設定したセルの値が指定した条件(例えば、特定の値より大きい、特定の値より小さいなど)を満たす場合に、書式が適用されます。
- 質問文の場合、C2セルの条件付書式は、「セルの値が500より大きい場合に文字色を赤にする」という設定になっています。しかし、手動計算の場合は、実際にセルの値が変わるまで書式が適用されないため、色が変わらない可能性があります。マクロを使用することで自動計算を行うことができ、正しく条件付書式が判定されるようになります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 > Calculate この記述は、sheet.Calculate メソッドで モジュールの親シートすべてを再計算させていますが、 条件付き書式の再計算をさせるには、 一旦そのセルを再計算させてからでないと反映されません。 (たぶん記述を書いた後の1回めだけは反映される筈ですが) なので、直接再計算させたいセルだけを range.Dependents プロパティ(rangeを参照している参照先セル範囲)で捉えて、 (sheet.Calculate メソッドではなく) range.Calculate メソッドで、 セル範囲を再計算させます。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Row > 1 Then Exit Sub If Target.Column > 3 Then Exit Sub Target.Dependents.Calculate End Sub これなら一発で条件付き書式の再計算まで反映されます。 (※sheet.Calculate を直前に実行後、コード書換えて試した場合は 2回目の再計算以降から正しく反映されるようになります) sheet.Calculate メソッドを実行させる必要があるなら、 range.Calculate メソッドの直後に実行させればいいです。
その他の回答 (1)
- real beatin(@realbeatin)
- ベストアンサー率82% (174/211)
#1です。説明不足がありました。 #1の記述は、 _Change イベントが書かれている親シートがアクティブな状態で A1:C3の値が変更(確定)された場合、 という前提で書かれています。 もしも、マクロからの処理で、他のシートがアクティブな状態で このイベントが呼び出された場合、 Target.Dependents.Calculate はエラーになります(range.DependentsはActiveSheetでしか機能しない)。 対策としては、セル範囲を決め打ちして再計算させるしかありませんので、 Cells(2, "C").Calculate と書いておいた方が、 却ってトラブルフリーなのかも知れません。 (もっとも、最適化を図るなら本来は、 <他のシートがアクティブな状態でこのシートのセル値を変更させる>マクロ の側で、セル値を変更させた後にrange.Calculateさせて、 二次的なイベント(_Change イベント)を実行させないように書くのが 正しいやり方です。) Target.Dependents.Calculate か Cells(2, "C").Calculate 実際の必要の如何に応じて、どちらかが正解、という意味ですので、 違いを理解してから選んでみてください。
お礼
追加の説明までいただきありがとうございます。 条件付書式は、同一シートで複数セルに使用します。 またこの条件付き書式判定してから自動のマクロを動作させる構成なので、Target.Dependents.Calculate でばっちりです(*^。^*)
お礼
回答ありがとうございます。Target.Dependents.Calculate でばっちりでした。その様な制約があるのですね。 私のマクロでもセル自体の値は変更されるので誤解しました。