特定の範囲の値が、別の特定の範囲の値と一致する場合はセルを赤色に塗るというVBAコードをどのように記述すればよいか、ご教示くださいますと幸甚でございます。 例えば
特定の範囲の値が、別の特定の範囲の値と一致する場合はセルを赤色に塗るというVBAコードをどのように記述すればよいか、ご教示くださいますと幸甚でございます。 例えば (O9:R9)に含まれている値が(S9:V9)に含まれている値と同じならば セルを赤色に塗る(添付画像参照) ということを実行したく存じます。 小職の理解度では O9の値がS9の値と同じならばセルを赤く塗る をコードに起こすまでにしか至らず(下記参照)、 加えて、小職のコードではうまく実行できませんでした。 セルに値が入力されたときに実行したいため、changeイベントで記述しております。 Private Sub Worksheet_Change(ByVal Target As Range) Dim j As Long '9行目から最終行までループ For j = 9 To Cells(Rows.Count, 1).End(xlUp).Row 'O列とS列が同じ値だったら If Cells(j, 15) = Cells(j, 19) Then 'O列とS列の背景色に色を塗る Cells(j, 15).Interior.Color = 65535 Cells(j, 19).Interior.Color = 65535 End If Next j End sub 大変恐縮ではございますが、どなたかお力添えいただけますと幸甚でございます。 何卒、よろしくお願いいたします。
Visual Basic | Visual Basic・78閲覧・25
ベストアンサー
この場合はループをさせずに、O列からV列を変更したときだけその行のみにマクロを実行させた方が、処理も重たくならず、不要なときは動かないようになってベストかなと思います。 一括で設定しなおしたいときは、一括設定用にマクロを別途用意しておけばOK。 Private Sub Worksheet_Change(ByVal Target As Range) '変更したセルがO列からV列ではない場合 If Intersect(Target, Range("O:V")) Is Nothing Then 'マクロを終了 Exit Sub End If Dim j As Long '行数は今変更したセルの行番号を代入 j = Target.Row 'OとS、PとT、QとU、RとVが全て一致していてかつ、空欄が無い場合 If Cells(j, 15) = Cells(j, 19) And _ Cells(j, 16) = Cells(j, 20) And _ Cells(j, 17) = Cells(j, 21) And _ Cells(j, 18) = Cells(j, 22) And _ WorksheetFunction.CountBlank(Range(Cells(j, 15), Cells(j, 22))) = 0 Then 'その範囲のフォント色を赤、背景色を黄色にする Range(Cells(j, 15), Cells(j, 22)).Font.Color = 255 Range(Cells(j, 15), Cells(j, 22)).Interior.Color = 65535 'そうでない場合 Else 'フォント色、背景色を規定値に戻す Range(Cells(j, 15), Cells(j, 22)).Font.ColorIndex = 0 Range(Cells(j, 15), Cells(j, 22)).Interior.ColorIndex = 0 End If End Sub
早速のご回答ありがとうございます。 大変恐縮ではございますが ご教示頂きましたコードを組み込んでみましたが、うまく実行できませんでした。 誠に恐れ入りますが ネット便にてファイルをアップロードいたしましたので 一度小職の作ったファイルをご覧いただき、どのようにすればよろしいかご教授いただければ幸いです。 https://1ne.jp/receiver/file_box.do?fb=65d8fbd8a9c1405abbe8a768d6a9e5f3&rc=b6ea82e6feb8476db28860d823b23697&lang=ja せっかく教えてくださいましたのに申し訳ありません。
質問者からのお礼コメント
回答、フォローの速度、精度、すべて的確でわかりやすく、非常に感動いたしました。 ご協力くださいまして誠にありがとうございます。 ベストアンサーとさせてください。 本当にありがとうございました。
お礼日時:5/19 17:51