手動計算時の条件付書式判定とは?
- 手動計算時の条件付書式判定とは、Excelのセルの値が特定の条件を満たす場合に、セルの書式(背景色や文字色など)を自動的に変更する機能のことです。
- 具体的には、条件付書式を設定したセルの値が指定した条件(例えば、特定の値より大きい、特定の値より小さいなど)を満たす場合に、書式が適用されます。
- 質問文の場合、C2セルの条件付書式は、「セルの値が500より大きい場合に文字色を赤にする」という設定になっています。しかし、手動計算の場合は、実際にセルの値が変わるまで書式が適用されないため、色が変わらない可能性があります。マクロを使用することで自動計算を行うことができ、正しく条件付書式が判定されるようになります。
- ベストアンサー
手動計算時の条件付書式判定
excel2010 条件付き書式の判定に制約あるのでしょうか? A1,B1,C1セルに数値を設定し、 C2セルに=SUM(A1:C1)と設定します。 C2セルの条件付書式は、セルの値 次の値より大きい =500 上記条件で文字色を赤 としています。 計算方法の設定は手動。 また、マクロで下記を設定しています Private Sub Worksheet_Change(ByVal Target As Range) If (Target.Row = 1) And (Target.Column >= 1 And _ Target.Column <= 3) Then 'セルの値に変更があったときに実行したい処理を記述 Calculate End If End Sub C2セルが500より大きくなったら、数値が赤になるはずですが、変わりません。 計算は実施しているのになぜ赤色にならないのでしょう? 下記の様にマクロを変更し、計算方法の設定を自動にすると正しく判定されます。 Private Sub Worksheet_Change(ByVal Target As Range) Application.Calculation = xlCalculationAutomatic '自動 xlCalculationManual If (Target.Row = 1) And (Target.Column >= 1 And _ Target.Column <= 3) Then 'セルの値に変更があったときに実行したい処理を記述 Calculate End If Application.Calculation = xlCalculationManual End Sub 上記で、とりあえずいけたのですが、計算はしているのに条件判定されないのが??? です。
- 3620313
- お礼率84% (217/257)
- Excel(エクセル)
- 回答数2
- ありがとう数4
- みんなの回答 (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 でばっちりです(*^。^*)
関連するQ&A
- ExcelVBA 二つのセルに入力された時の判定
セルA1とA2両方に値が入力された時、セルA3に文字を入力するマクロを作りたいです。 下記プログラムで試しているのですが、ステップインで見ると最初のIFでTrue判定されてしまいます。 どうすればこの条件を満たすマクロになるのか、教えて頂けないでしょうか。 以上、宜しくお願い致します。 Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("A1")) Is Nothing Or Intersect(Target, Range("A2")) Is Nothing Then Exit Sub Else If Range("A1").Value <> "" And Range("A2").Value <> "" Then Range("A3").Value = "入力済み" End If End If End Sub
- ベストアンサー
- その他(プログラミング・開発)
- マクロでの条件付書式について
私は、下記のようなO列の値を変更するとそれに伴ってセルの色が変化するマクロを作成しました。 下記の通りで、色は変わるのですが、 (1)セルO8をコピー (2)セルO9:O10を範囲選択 (3)貼り付け とすると 「型が一致しません」 というエラーがでてしまいます。 いろいろと調べたのですが、原因が分かりませんでした。 マクロに関しては、初心者で初歩的な事かも知れないのですがご教授お願いいたします。 Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("O8:O5000")) Is Nothing Then Exit Sub Select Case Target.Value Case Is = "連絡待ち" Target.Interior.ColorIndex = xlNone Case Is = "取引連絡中" Target.Interior.ColorIndex = 23 Case Is = "取置き" Target.Interior.ColorIndex = 3 Case Is = "入金連絡あり" Target.Interior.ColorIndex = 4 Case Is = "発送準備中" Target.Interior.ColorIndex = 7 Case Is = "発送待ち" Target.Interior.ColorIndex = 17 Case Is = "発送済み" Target.Interior.ColorIndex = 16 Case Else Target.Interior.ColorIndex = xlNone End Select End Sub
- ベストアンサー
- オフィス系ソフト
- エクセルのVBAで条件付でフォントを変更したいのですが
たとえばD19のセルには他のセルに入力された文字数が表示されるようLEN(C19)といったような関数が入力されています。D19の値が20より大きければE19のフォントは20にそれ以外なら11にしたいとします。 ちなみにE19も関数が入力さています。 下記でよいのかなと思ったのですが・・・ 直接数値を入力する場合はちゃんと動くのですがD19が数式になるとうまく行きません。どなたか教えてください。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$D$19" Then If Target.Value > 20 Then Range("E19").Font.Size = 20 Else Range("E19").Font.Size = 11 End If End If End Sub
- ベストアンサー
- オフィス系ソフト
- イベントを起こすと画面が揺れまくって大変です・・・結構見栄えもきついので回避できないでしょうか?
以前ワークシートのイベントのプログラムを教えていただきありがとうございました。 参考に作ったプログラムなのですが・・・範囲をもう少しだけでかくしてやると画面がゆれて困っています。 値を入れてコピーしているときが特にひどいです。 複数セルを選択して消去しても大丈夫なようにかつ揺れない方法はないでしょうか? Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) Dim r As Range For Each r In Target MyProc r Next End Sub Sub MyProc(Target As Range) Dim i As Long Application.EnableEvents = False If Selection.Cells.Count <> 1 Then Exit Sub ' 変更したセルに値が入った場合条件成立 If Trim(Target.Value) <> "" Then ' 行番号が10以上65530以内のとき条件成立 If Target.Row >= 10 And Target.Row <= 65530 Then ' BCD列で、5の倍数の行のとき条件成立 If (Target.Column >= 2) And (Target.Column <= 4) Then If (Target.Row Mod 5) = 0 Then If Target.Value <> "" Then For i = 0 To 4 Target.Copy Target.Offset(i, 10).PasteSpecial Paste:=xlPasteValues Next If (Target.Column = 2) Then Worksheets("Sheet4").Range("A2:K6").Copy Target.Offset(5, -1) End If End If Else Exit Sub End If End If End If Application.CutCopyMode = False End If Application.EnableEvents = True End Sub
- ベストアンサー
- Visual Basic
- Excel VBA で1時的に右クリックを使いたい
30枚ほどのシートの表を一挙に変更したいです。ところが、各シートに次のコードが入っているため、右クリックしてコピーとか一切使えません。各シートの変更ができるまで、右クリック使いたいです。何か方法ありませんでしょうか? ' 画面の一番上表示 Dim hr As Range Set hr = Range("A1") '左上隅セルを設定 ActiveWindow.ScrollRow = hr.Row '行の一番上にスクロール ActiveWindow.ScrollColumn = hr.Column '列の一番左にスクロール End Sub Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) Cancel = True 'プロシージャ終了後に表示されるショートカットメニューの非表示 If Target.Row > 14 And Target.Row < 45 And Target.Column > 13 And Target.Column < 15 Then 明細入力フォーム.Show End If If Target.Row > 36 And Target.Row < 45 And Target.Column > 1 And Target.Column < 3 Then Call ShowCalendarFromRange2(Target) End If If Target.Row > 36 And Target.Row < 45 And Target.Column > 3 And Target.Column < 5 Then Call ShowCalendarFromRange2(Target) End If If Target.Row > 36 And Target.Row < 45 And Target.Column > 5 And Target.Column < 7 Then Call ShowCalendarFromRange2(Target) End If If Target.Row > 36 And Target.Row < 45 And Target.Column > 8 And Target.Column < 10 Then Call ShowCalendarFromRange2(Target) End If If Target.Row > 36 And Target.Row < 45 And Target.Column > 2 And Target.Column < 4 Then UserForm3.Show End If If Target.Row > 36 And Target.Row < 45 And Target.Column > 4 And Target.Column < 6 Then UserForm3.Show End If If Target.Row > 36 And Target.Row < 45 And Target.Column > 6 And Target.Column < 8 Then UserForm3.Show End If If Target.Row > 36 And Target.Row < 44 And Target.Column > 9 And Target.Column < 11 Then UserForm3.Show End If End Sub
- ベストアンサー
- Excel(エクセル)
- シングルクリックでフォームが表示されない
windowsXP Excel2000 でマクロを作成している超初心者です。 あるサイトの暦で日付を入力するマクロですが、1枚のシートに 1)と 2)を併記して実験したところ正常に表示できました。 2)をシングルクリックで表示したいのですができません。なぜでしょうか? 2)はいかにも稚拙です。もっと整理したいのですが方法が分かりません。以上2点よろしくご指導ください。 -------------------------------------------------------------------- 1)シングルクリックで UserForm1を正常に起動できました。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'シングルクリックで表示 Cancel = True 'プロシージャ終了後に表示されるショートカットメニューの非表示 If Target.Row > 22 And Target.Column > 2 And Target.Column < 4 Then UserForm1.Show End If If Target.Row > 22 And Target.Column > 13 And Target.Column < 15 Then UserForm1.Show End If End Sub ------------------------------------------------------------------------- 2)ダブルクリックでしか正常に表示されません。 'Private Sub Worksheet_SelectionChange(ByVal Target As Range)’ 起動しない Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) '起動した Cancel = True 'プロシージャ終了後に表示されるショートカットメニューの非表示 If Target.Row > 23 And Target.Column > 1 And Target.Column < 3 Then Call ShowCalendarFromRange2(Target) End If If Target.Row > 23 And Target.Column > 12 And Target.Column < 14 Then Call ShowCalendarFromRange2(Target) End If If Target.Row > 12 And Target.Row < 21 And Target.Column > 12 And Target.Column < 14 Then Call ShowCalendarFromRange2(Target) End If If Target.Row > 12 And Target.Row < 21 And Target.Column > 14 And Target.Column < 16 Then Call ShowCalendarFromRange2(Target) End If If Target.Row > 12 And Target.Row < 21 And Target.Column > 16 And Target.Column < 18 Then Call ShowCalendarFromRange2(Target) End If If Target.Row > 12 And Target.Row < 21 And Target.Column > 18 And Target.Column < 20 Then Call ShowCalendarFromRange2(Target) End If End Sub ----------------------------------------------------------------------- 3)'これがサイトにあった例で、これを元に上のスクリプトを作りました。 'Private Sub Worksheet_SelectionChange(ByVal Target As Range) ' 複数セル選択時は無視 ' If Target.Count <> 1 Then Exit Sub ' A列以外は無視(今回サンプルの例) ' If Target.Column <> 1 Then Exit Sub ' カレンダーフォームを起動する ' Call ShowCalendarFromRange2(Target) 'End Sub ---------------------------------------------------------------
- ベストアンサー
- Visual Basic
- エクセルコードについて
エクセルコードについて Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Row >= 1 And Target.Row <= 10 And Target.Column >= 1 And Target.Column <= 10 Then If Target.Value = "○" Then Target.Value = "" Else Target.Value = "○" End If Cancel = True End If End Sub ではセルA1~J10ですが、これをA1~A10などに変更するのにはどのようにすればよろしいでしょうか。
- 締切済み
- その他(ビジネス・キャリア)
- 数式結果で色分けをしたい
以下の設定により、セルの内容によって色分けするように設定しています。また、セルには数式を入れており、IF式を使用して、他のセルの値によって"◎"や"×"などを表示するようにしてします。が、セルの表示が切り替わっても色が替わりません。ちなみに、数式をコピペするとちゃんと色分けされます。数式が参照するセルの内容が変わったと同時に色が変わるようにするにはどうすればいいのでしょうか?どなたか詳しい方教えてください。宜しくお願いします。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 17 Then x = Target.Value c = 0 If x Like "◎" Then c = 33 If x Like "○" Then c = 6 If x Like "△" Then c = 3 If x Like "×" Then c = 1 Target.Interior.ColorIndex = c End If End Sub
- ベストアンサー
- オフィス系ソフト
- Excelの条件付書式の色の付け方について
Excelの条件付書式を使用して色を付けたいです。 特定のセルの値がマイナスの場合で、マイナス数値が入っている行のセルに値が入っていた場合、色を付ける条件式を作りたいです。 例 A列 B列 C列 ・・・・・ IV1 -1 10 ↑ ココに色を付ける 1つのセルのみの条件式だと 数式が =AND($A$1<0,$C$1<>"") という形で書けたのですが =AND($A$1<0,$C$1<>"")の式だと ↑ ココの式を1つ1つ変えた条件式をIV列まで書かないとならない為すごく大変です。 数式が =AND($A$1<0,自分自身のセルが空白) というような書き方を教えて頂けないでしょうか?
- ベストアンサー
- オフィス系ソフト
お礼
回答ありがとうございます。Target.Dependents.Calculate でばっちりでした。その様な制約があるのですね。 私のマクロでもセル自体の値は変更されるので誤解しました。