プロが教えるわが家の防犯対策術!

【Excel2003で条件付き書式3つ以上の場合について】

似たような質問は多いのですが、知識がないためそれを応用できなかったので、質問させてください。

Excel2003では条件付き書式は3つが上限ですが、今回4種類書式を指定したいのです。
4つとなるとVBAになる、というのはいくつも過去の質問で見てきたのですが私が見たものはどれも入力した文字に対して色を変えるというものでした。

私のやりたいのは指定した文字が入力されると、同じ行の別の列のセルに着色というものなのです。
現在使用しているリストの状態を説明します。

A列はダブルクリックすると指定した文字が入るようなっています。それが入力されると同じ行のB~F列は条件付き書式で取り消し線がはいるようになっています。
また、G列に日付が入ると日付を入力したのと同じ行のB~F列セルが赤色に、H列に日付が入ると緑色に変わり、K列に日付が入ると色が消えます。

つまりB~F列には条件付き書式を3つ使用しているのですが、今回リストを作り替えるにあたって新たにG列に日付以外の特定の文字か記号(仮に○とします)が入力された場合は現状のようにB~F列セル色を赤にするのではなくB~F列に入力されている文字の色を赤くしたいのです。
そして特定の記号以外、通常は日付なのですが、それを入力した際は今まで通りB~F列のセルの色を赤くしたいのですが・・・
他についても今まで通りH列に入力すれば緑、K列に入力すればすべて色が戻るようにしておきたいです。
取り消し線だけはどの状態の時にもA列に入力がある限り残る形で、です。

もっとうまく説明できればいいのですが、Excelにあまり詳しくないためこのような説明しかできませんでした。

現在は条件付き書式でやっていますが上記したのと同じ動きさえできれば現在入力している関数などが変わっても問題ありません。
日付入力状況が色でわかるためのリストで、特にリスト上で計算しているものではありませんので。

このような場合はやはりVBAとかになるのでしょうか。またその場合はどういった形で入力すれば希望の形になるのでしょうか。。。
Excel初心者のため何もわかりません。

以上拙い説明で申し訳ありませんが、ご教授よろしくお願いします。

A 回答 (3件)

エクセル2003以前では条件は3つしか設定できないのは動かしようがありません。


ですからエクセルではそれ以上望む場合は、エクセルの条件付き書式ではありません。
ですから長々とそれに対する確認的記述はやめましょう。一応質問文章表現は、エクセルを判っているものに向かって、が基本ですから。
2007や2010に乗り換えれば条件の数では解決するでしょう。
そういうことで、2003ではVBAなどによらないとなりません。
>Excelにあまり詳しくないためこのような・・
エクセルと直接関係ないことで、エクセルに詳しくないと逃げ口上をせず、しっかり整理して質問してください。説明が長々していて文章が整理されてません。
現状はどうあれ、変更(改善)したいなら、変更後を中心にしたいことを記述するで済むのではないですか。
場合分けを適切に記述し、箇条書きで、この場合はこう(鳴るようにしたい)と記述してください。
>関数などが変わっても問題ありません
関数では、セルのパターン色や、セルのフォント色や取り消し線を左右することは出来ません。エクセルが良く判ってない一兆候です。関数はセルの1つの値を作り出すだけの機能です。
ーーー
VBAでは表が完成してから、条件に従って質問のように整える・する(バッチ処理)のは簡単ですが、そういうニーズの場合は少なく、動的に、操作に即時反応性が求められる場合でしょう。
だからエクセルVBAでいうイベントという考えを使ってコードを書くことになると思いますが、いま在る
シートのセルの
Private Sub Worksheet_Change(ByVal Target As Range)

End Sub
にコードを書くことになると思うが、これは余りお勧めできません。
普通の場合は思い通りになりますが、セル、行、列の削除、移動・貼り付けなどいろんなことがシートで行われる(間違っての場合を含む)のに、それに対処するようコードを書くのは、VBA熟達者でも難しいし、質問者の出来るレベルではありません。
ですからしばらくはあきらめざるを得ないでしょう。
すべきことは
(1)論理的に整理してわかりやすい運小を書く訓練
  例示して説明する訓練
(2)上記ChangeイベントでSheet1のシートタブで右クリック、「コードの表示」をクリックして現れる画面に下記をコピペ
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then 'A列なら
MsgBox Target.Address & " Change"
End If
End Sub
シートのデータ(上記例ではA列データ限定)などを色々セルのデータなど触って見て、メッセージが出るかどうか、適切かどうか、徹底的に実験して、どうしたらどうなるを実感してください。
If Target.Column = 1 Then   をいじくることで、セル限定、行限定などでイベントを捕まえることが出来ます。
それで上記が使えそうなら
(3)エクセルには、マクロの記録という仕組みがあります。
これを使って、下記などは、どういうコードになるか調べて勉強のこと
・フォントに取り消し線を入れる
・セルのパターン色を赤くする・フォント色を赤色にする(その他の色にお場合は)
・色をもどす(白色で良いのか、その変更前の状態なのか。これは難物)
・入力されたデータが日付なのかの判別(これはマクロの色区では作れない。WEB照会)
Googleで「vba 日付データ 判別」
http://officetanaka.net/excel/vba/cell/cell02.htm など
・同じ行をどう捉うか(Target.Rowがヒント)
・ダブルクリックされたかどうか(これが必要か質問では明確でない)捉える必要があるか
・その他前記でもれているものがあればそれを
ーー
あと基本的なことで
・シートの捉え方
・セルや行。列の捉え方
などの学習も必要です。
ーー
私見では、質問者のレベルは、講習でも行って勉強しないとだめ・無理なレベルではないかな。
    • good
    • 0

>A列はダブルクリックすると指定した文字が入るようなっています。


これはVBAのWorksheet_BeforeDoubleClickイベントで設定されてるのでしょうか?
(そうであればシートモジュールって解かると思うんですが念のため)
該当シートのシートタブを右クリック、[コードの表示]でVBE(VisualBasicEditor)が起動し
無地のウィンドウが開きますからそこに以下コピーペーストしてください。

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim r As Range
  Set Target = Intersect(Target, Me.Columns("A"), Me.UsedRange)
  If Not Target Is Nothing Then
    For Each r In Target
      r.Offset(, 1).Resize(, 5).Font.Strikethrough = (r.Value <> "")
    Next
  End If
End Sub

'↑ここまで

A列の値が変更される度に自動的に実行されるイベントマクロです。
A列に入力があると同じ行のB~F列に取り消し線を入れます。
条件付き書式の設定から取り消し線に関する条件を削除してください。

Me.Columns("A")...の部分でA列全体を指定してますから
A1:A100など、もっと限定的な範囲の場合は
':
Set Target = Intersect(Target, Me.Range("A1:A100"), Me.UsedRange)
':
のように修正してください。


既に入力してあるデータに反映させる為には、初回に1度だけ下記マクロを走らせます。
Sub test()
  Dim Target As Range
  Dim r As Range
  Set Target = Intersect(Columns("A"), ActiveSheet.UsedRange)
  If Not Target Is Nothing Then
    For Each r In Target
      r.Offset(, 1).Resize(, 5).Font.Strikethrough = (r.Value <> "")
    Next
  End If
  Set Target = Nothing
End Sub
    • good
    • 0
この回答へのお礼

うまくいきました!
どうもありがとうございました。

お礼日時:2010/07/10 22:15

残念ながらおっしゃる通り書式は3種類までです。

(条件は4種類以上可能です)

数値の大小でそのセルなら書式設定でも可能ですが(代表例.文字を赤にする)
ご質問の場合は無理ですね。

VBAを扱うことになりますが、当方もあまり詳しくありません。
(エラー処理に追われていまいちだった)

代案です。
A列の前に1列挿入して、
=IF(G2="○","◆問題発生◆","")
としてA列のフォントを太字で赤くしておく
といった条件付き書式以外で目立ちやすい方法を使い、
発想を転換させることができないでしょうか?

参考まで
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!