• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel2007の条件付き書式をVBAで行う方法)

Excel2007の条件付き書式をVBAで行う方法

このQ&Aのポイント
  • Excel2007での条件付き書式をVBAで行う方法を教えてください。
  • E列に「あ」と入力されると、A列からE列までのフォントが青、セルの塗りつぶしが黒になる。E列に「い」と入力されると、A列からE列までのフォントが黒、セルの塗りつぶしが白になる。E列に「あ」「い」以外が入力された場合は何もしない。
  • セルのフォントと塗りつぶしの色を変更する条件付き書式をVBAで実装する方法を教えてください。また、RGBを使って色の指定が可能かどうかも知りたい。

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

  • ベストアンサー
noname#144013
noname#144013
回答No.1

こんにちは。 下記にサンプルマクロを掲載しましたので、宜しければ検証 してみて下さい。(※これは一例です) > E列に「あ」「い」以外が入力された場合は何もしない。 『何もしない』、ということは   『それまでの色設定を維持する』 ということになるので、 仮にそれまでの設定が「あ」の設定だった場合は   その色設定(フォント色=青、セル色=黒)のまま ということになりますが、それで宜しいのでしょうか? 以下のサンプルマクロでは、E列セルで変更された文字が 「あ」でも「い」でもなかった場合は、A列~E列の色設定を デフォルトの色設定に戻す、という処理にしています。 ※もし、本当に何もしなくて良いのであれば、下記マクロの  Case Else~の箇所を削除するかコメントアウトして下さい。 ■サンプルマクロ ======================== '== セル内容変更時のイベント処理 == Private Sub Worksheet_Change(ByVal Target As Range)   Dim rg As Range   'Rangeオブジェクト取得用   Dim nRowPos As Long '色変更対象の行位置   Dim nClmPos As Long '色変更対象の列位置   Dim nRowNum As Long '色変更対象の行数   Dim nClmNum As Long '色変更対象の列数   '変更セル(複数セルも含む)が[E列]以外なら戻る   If Application.Intersect(Target, Range("E:E")) Is Nothing Then     Exit Sub   End If   '色変更するセル範囲の位置設定   nClmPos = 1 '色変更対象の列位置   nRowNum = 1 '色変更対象の行数   nClmNum = 5 '色変更対象の列数   '変更セルが複数の場合を考慮し[For Each]でループ処理   For Each rg In Target     '対象セルが1行目(タイトル行)以外かつE列なら処理     If rg.Row <> 1 And rg.Column = 5 Then       '対象セルの行位置を取得       nRowPos = rg.Row       '変更セルの内容により振り分け       Select Case rg.Value       Case "あ"         '変更セルの文字が"あ"の時は、フォント色=白、セル色=青とする         '※[青]と[黒]だと判りづらいので[白]と[青]にしました。         With Cells(nRowPos, nClmPos).Resize(nRowNum, nClmNum)           .Font.Color = RGB(255, 255, 255)           .Interior.Color = RGB(0, 0, 255)         End With       Case "い"         '変更セルの文字が"い"の時は、フォント色=黒、セル色=黄とする         '※[黒]と[白]だとデフォルト色と同じなので[黒]と[黄]としました。         With Cells(nRowPos, nClmPos).Resize(nRowNum, nClmNum)           .Font.Color = RGB(0, 0, 0)           .Interior.Color = RGB(255, 255, 0)         End With       Case Else         '上記以外の時は、デフォルト色に戻す。         '注)全く何もしなくて良いのなら下記4行はコメントとするか         '  削除して下さい。         With Cells(nRowPos, nClmPos).Resize(nRowNum, nClmNum)           .Font.ColorIndex = xlColorIndexAutomatic           .Interior.ColorIndex = xlColorIndexNone         End With       End Select     End If   Next End Sub ======================== 添付画像は、当方で検証した際のExcelシート画面です。 ※貼れていなかったり、見辛かった場合はすみません。 以上です。

t-tomy
質問者

お礼

早速の回答ありがとうございました。 今回、VBAを初めて操作するので、詳細なコメントアウトを書いていただき、 大変勉強になります。誠にありがとうございます。 > 『何もしない』、ということは >   『それまでの色設定を維持する』 > ということになるので、 > 仮にそれまでの設定が「あ」の設定だった場合は >   その色設定(フォント色=青、セル色=黒)のまま > ということになりますが、それで宜しいのでしょうか? ご指摘の通り、「何もしない」ではおかしく、 「デフォルトの色にする」が適切でした。 ご指摘ありがとうございます。 With~End Withステートメントを使えば2つの処理を させることができたんですね。勉強になります。 当方の環境にて、思い描いていた通り以上の結果になりました。 お忙しい中、サンプルを作成していただき、ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A