• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:【Excel2003で条件付き書式3つ以上の場合について】)

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

このQ&Aのポイント
  • Excel2003では条件付き書式は3つが上限ですが、4つ指定したい場合はVBAを使用する必要があります。
  • 指定した文字が入力されると、同じ行の別の列のセルに着色する方法を知りたいです。
  • 現在は条件付き書式を使用していますが、VBAを使用することでより柔軟な設定が可能です。

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

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.2

>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

44-5sakura
質問者

お礼

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

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.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がヒント) ・ダブルクリックされたかどうか(これが必要か質問では明確でない)捉える必要があるか ・その他前記でもれているものがあればそれを ーー あと基本的なことで ・シートの捉え方 ・セルや行。列の捉え方 などの学習も必要です。 ーー 私見では、質問者のレベルは、講習でも行って勉強しないとだめ・無理なレベルではないかな。

回答No.1

残念ながらおっしゃる通り書式は3種類までです。(条件は4種類以上可能です) 数値の大小でそのセルなら書式設定でも可能ですが(代表例.文字を赤にする) ご質問の場合は無理ですね。 VBAを扱うことになりますが、当方もあまり詳しくありません。 (エラー処理に追われていまいちだった) 代案です。 A列の前に1列挿入して、 =IF(G2="○","◆問題発生◆","") としてA列のフォントを太字で赤くしておく といった条件付き書式以外で目立ちやすい方法を使い、 発想を転換させることができないでしょうか? 参考まで