- ベストアンサー
Excel VBAで該当行全体の色変化の方法
- Excel VBAを使用して、特定の条件に該当する行全体の色を変える方法について教えてください。
- 具体的には、日時を選択したセルに対して、同じ日時のセルに○を記載し、そのセルの色を赤くし、それ以外のセルを明るい緑に変える方法を知りたいです。
- また、以下の問題点についても解決策を教えてください:1. 範囲指定の方法の不正確さ、2. 変数の設定法の未熟さ。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#1です。 E列の選択肢は、"1月1日 10:00","1月1日 18:00","1月2日 10:00",... という形と仮定すると、下記のコードでできると思います。 (当方XL2000ですので、上位バージョンで動かなかったら悪しからず) 作業行を設けて、検索する相手も、"1月1日 10:00"という形にしておくと、面倒な文字列処理が要らなくなります。その範囲を、E列の入力規則のリスト元にするという手もあるかもしれません。 理解が異なっているところがあれば手直しはいたしますが、解説はご容赦下さい。 目的のシートの、シートモジュールに記述してください。 Private Sub Worksheet_Change(ByVal Target As Range) Dim buf As String Dim strDate As String, strTime As String Dim spcPos As Long Dim dateRange As Range, myRange As Range If Intersect(Range("E2:E44"), Target) Is Nothing Then Exit Sub If Target.Cells.Count > 1 Then Exit Sub 'E列の日時が1月1日 10:00"の形で入っているとする buf = Target.Value spcPos = InStr(buf, " ") strDate = Left(buf, spcPos - 1) strTime = Mid(buf, spcPos + 1, Len(buf) - spcPos) Set dateRange = Range("I2:S2").Find(strDate, LookIn:=xlValues, lookat:=xlWhole) If dateRange Is Nothing Then MsgBox ("みつかりません") Exit Sub End If Select Case strTime Case "10:00" Set myRange = Target.Offset(0, dateRange.Column - Target.Column) Case "18:00" Set myRange = Target.Offset(0, dateRange.Column - Target.Column + 1) End Select Intersect(myRange.EntireRow, Range("G4:S44")).Interior.ColorIndex = 35 myRange.Interior.ColorIndex = 3 End Sub
その他の回答 (1)
- mitarashi
- ベストアンサー率59% (574/965)
E列の入力規則で日時を選択したときに、ワークシートのchangeイベントで、選択した日時と、見出し行の日時に関連づけられる値のセルを検索して...という事が考えられますが、どの様に関連付けられるのかが御質問からは読み取れませんので、回答が付かないものと思います。実際のワークシートの画像を添付されてはいかがでしょうか。また、参照元と、参照先の日時が文字列なのか、日付シリアル値なのかによってもコードは変わる可能性がありますので、その情報も必要です。
お礼
ご多忙の中、ご返答を執り行って頂き誠にありがとうございました。
補足
ご返答、誠にありがとうございます。 説明の補足を行わせて頂きます。 例: I2とJ2のセルを結合して日付(文字列)を記載("1月8日"など) I3/J3の各セルに時間(文字列)を記載("10:00"/"16:00"など) このようなフォーマットでS列まで続きます。 指定したドロップダウンの行と、上記の該当するする日時が交差するセルに"○"を記入し、同時にセル色を赤くする…といった内容になります。 参照元並びに参照先の日時はいずれも"文字列"になります。 画像のUPを試行致しましたが、正常に実施されなかったようです。 引き続き画像のUPも試行致しますので何卒宜しくお願い致します。
お礼
非常に参考になりました。 記載されている内容を咀嚼し、併せて動作確認も実施させて頂きました。 "特定の文字列を抽出する"方法は、他のプログラミングにも活かされるテクニックだと感じました。 ご多忙の中、的確なアドバイスをご教示して頂き、本当にありがとうございました。