• ベストアンサー

EXCEL2003の質問です

B4からB7に開始時間、C4からC7に終了時間、D4からD7に時間数が計算してあります(C4-B4~C7-B7)。D11に各時間をcountで計算して4と表示しています(=count(D4:D7)。各時間の中でD6のセルの時間表示を赤色にした場合に各時間の計算を黒色のみを計算する方法はありますでしょうか(4→3で計算)。もし計算する方法がありましたら教えて下さい。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! Excelの関数でフォントの色を条件に集計するものはなかったと思いますので、 VBAでの一例です。 ↓の画像の配置のようにD11セルに「赤字」以外の合計を表示するようにしてみました。 画面左下にあるSheet見出し上で右クリック → コードの表示 → VBE画面になりますので、 ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub test() 'この行から Dim i As Long Dim vl1, vl2 As Variant For i = 4 To 7 If Range("D" & i).Font.ColorIndex = xlAutomatic Then vl1 = Range("D" & i) vl2 = vl2 + vl1 End If Next i With Range("D11") .Value = vl2 .NumberFormatLocal = "[h]:mm" End With End Sub 'この行まで 実際のデータと配置が違っているのであれば、コード内の列番号・行番号を修正してみてください。 参考になれば良いのですが・・・m(__)m

noname#197073
質問者

お礼

短時間のうちに詳細なコードまで記載していただき感謝しております。VBAでいろいろなことができるのですね。早速実行してみます。ありがとうございました。

その他の回答 (2)

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.3

セルや文字の色で見分けて計算を分けてくれる関数は一つもないので,例えば次のように細工すると出来ます。 手順: B1セルを選ぶ(関係ないと思っても必ずこうする) 挿入メニューの名前の定義を開始する  名前 getfontcolor  参照範囲 =get.cell(24,!A1)+NOW()*0 と作成し,登録する >各時間の中でD6のセルの時間表示を赤色にした場合に E4セルに =getfontcolor と記入し,E7セルまでコピーする D4からD7の文字の色が数字で計算されるので,あなたの赤が3と計算されていたら =SUMIF(E4:E7,"<>3",D4:D7) あるいはあなたの黒がゼロと計算されていたら =SUMIF(E4:E7,0,D4:D7) のように計算できます。 #マクロを含めこのやり口に類似の全ての方法では,書式(色)を変えた「直後」には結果がすぐには反映しません。  具体的なやり口によって対処は変わりますが,今回回答の方法ではF9キーを押してE列の計算結果を再計算させると正しい結果が得られます。 #マクロを含めこのやり口に類似の全ての方法では,「条件付き書式」で色を付けていた場合に検出する事は出来ません。が,条件付き書式で色を付けていたなら色に頼らずその条件を数式で再現し,条件の元になったセルに照らして欲しい結果を計算で求める事ができます。

noname#197073
質問者

お礼

早々の回答ありがとうございました。いろいろな方法があることを知りました。get Cellもはじめて知りました。いろいろな方法で試してみます。短い時間での回答ありがとうございました。

  • 4649panda
  • ベストアンサー率68% (15/22)
回答No.2

時間表示が赤色になる為の条件が表の中にあるならば、色よりもその条件を使ってSUMIF関数を使えるかも知れません。 もし特定の条件が無いか、表の中の値以外に条件があるのなら、もう一列余分に作って(非表示で構いません)、それを使ってSUMIF関数で合計することもできます。 根本的な解決になっていなくてすみません。

noname#197073
質問者

お礼

早速の回答ありがとうございました。時間表示を赤にするのは条件式で設定しました。もう一列作成した 上でSUMIFでやってみます。ありがとうございました。