• 締切済み

条件付き書式4つ以上のVBAについて教えてください。

fumufumu_2006の回答

回答No.2

こんなのではどうでしょうか? ちなみに、I1からの4/1 2 3 ... は表示だけで、実際は日付データ(2008/4/1 2008/4/2 2008/4/3 ...)だという場合です。 質問のデータで、A-B赤、C-D青にします。 Private Sub Worksheet_Change(ByVal Target As Range) Dim c1 As Variant Dim c2 As Variant If Target.Column <= 8 Then 'A-H列の場合 '現在の設定クリア 'Range(Cells(Target.Row, 9), Cells(Target.Row, Cells(1, Columns.Count).End(xlToLeft).Column)).Interior.ColorIndex = xlNone '本当はこれが正しいんだろうけど複雑なので Rows(Target.Row).Interior.ColorIndex = xlColorIndexNone '変更された行の背景色をクリア 'A-B区間 c1 = Application.Match(Cells(Target.Row, 1), Rows(1), 0) '変更された行のA列の値を1行目から探す c2 = Application.Match(Cells(Target.Row, 2), Rows(1), 0) '変更された行のB列の値を1行目から探す If (Not IsError(c1)) And (Not IsError(c2)) Then If (c1 <= c2) Then Range(Cells(Target.Row, c1), Cells(Target.Row, c2)).Interior.ColorIndex = 3 '赤 End If End If 'C-D区間 c1 = Application.Match(Cells(Target.Row, 3), Rows(1), 0) '変更された行のC列の値を1行目から探す c2 = Application.Match(Cells(Target.Row, 4), Rows(1), 0) '変更された行のD列の値を1行目から探す If (Not IsError(c1)) And (Not IsError(c2)) Then If (c1 <= c2) Then Range(Cells(Target.Row, c1), Cells(Target.Row, c2)).Interior.ColorIndex = 5 '青 End If End If End If End Sub 7区間の場合です。 上の各区間の設定を繰り返してもいいのですが、ループにしてみました。 ついでに背景色をcolorindexで指定すると濃すぎるので、rgb()で中間色も指定できるようにしました。 質問のデータが4区間なので、質問のデータでは「For i=1 To 4」にしないと、正しく表示しません。 Private Sub Worksheet_Change(ByVal Target As Range) Dim c1 As Variant Dim c2 As Variant Dim c As Variant Dim i As Integer '各区間の色設定 'c = Array(3, 5, 4, 6, 7, 8, 9) '背景色(ColorIndexを使う場合) c = Array(RGB(255, 192, 192), RGB(192, 192, 255), RGB(192, 255, 192), RGB(255, 255, 192), RGB(255, 192, 255), RGB(192, 255, 255), RGB(255, 255, 255)) If Target.Column <= 14 Then 'A-N列の場合(7区間) 質問のデータの場合は4区間なので8にしてください '現在の設定クリア Rows(Target.Row).Interior.ColorIndex = xlColorIndexNone '変更された行の背景色をクリア 'A-B区間 For i = 1 To 7 '質問のデータの場合は4区間の4にしないと、おかしくなります c1 = Application.Match(Cells(Target.Row, i * 2 - 1), Rows(1), 0) '変更された行のA列の値を1行目から探す c2 = Application.Match(Cells(Target.Row, i * 2), Rows(1), 0) '変更された行のB列の値を1行目から探す If (Not IsError(c1)) And (Not IsError(c2)) Then If (c1 <= c2) Then 'Range(Cells(Target.Row, c1), Cells(Target.Row, c2)).Interior.ColorIndex = c(i - 1) 'ColorIndexを使う場合は、上のc=array(...)でColorIndex用のデータを用意しておく Range(Cells(Target.Row, c1), Cells(Target.Row, c2)).Interior.Color = c(i - 1) End If End If Next End If End Sub

yuumi2000
質問者

お礼

ありがとうございます! 1番目の方法でできましたのですが… (2番目の方法は私には難しいようです) あと補足として、 実はA~H行が別シートにあり データ参照で持ってきています。 その為、変更された行というのが有効にならないようです。 別シートの指定方法があれば教えて下さい。 説明不足ですみません。

yuumi2000
質問者

補足

ありがとうございます! 1番目の方法でできましたのですが… (2番目の方法は私には難しいようです) 補足内容として、 実はA~H行が別シートにあり (例:「データ」というシートのA,F,H,J,K,R,T行から) データ参照(IF(データ!$A2="","",データ!$A2))で持ってきています。 その為、変更された行というのが有効にならないようです。 別シートの指定方法があれば教えて下さい。 説明不足ですみません。

関連するQ&A

  • 条件付き書式について

    条件付き書式について A   B      C 件数 売上商品名  売上日 0   リンゴ    1/1 4   リンゴ 1/2 3   リンゴ 1/3 0   リンゴ 1/4 上記のような表をエクセル2003で作成しました。 A列の3行目と6行目の0件は誤入力です。 そこで質問なのですが、Bにリンゴの入力があり、かつ、 A列に0が入っていれば、セルを黄色にする条件付き書式 設定をしたいのですが、やり方がよくわかりませんでした。 教えてください。 あと、できればVBAで出来る方法も教えていただければ幸いです。

  • エクセルの条件付き書式設定について教えてください

    エクセルの条件付き書式設定について教えてください エクセルで工程表を作成しているのですが、条件付き書式設定で悩んでいます。 開始日と終了日に日付を入れるとその間はセルの色が黒に変わるように設定しているのですが、更に作業内容の項目のFIXという項目の開始日と終了日を入力したときだけセルの色を赤に変わるように設定したいです。 <例>                      7/1 7/2 7/3 A        B(開始日)   C(終了日) キックオフ   7月2日     7月2日 制作      7月8日     7月18日 FIX       7月20日    7月20日 色々と関数を使って試してみたのですが、どうしてもうまくできません。 ちなみにEXCELは2007です。 お手数ですが、ご教授お願いします。

  • VBAの条件付き書式の書き方

    VBA初心者です。 同じような質問が出ていますが、ドンピシャなのがなく助けて下さい。 エクセルで会社のスケジュールを作成中です。     A          B     ・・・ 1 =(sheet2!a1)   =$a$1 2    〃       =$b$1 3 4 という内容でa1から下のセルには日付が1,2,3と入っていて、 1ヵ月の予定で土日祝日と会議デーに色を付けたいのです。 予め、条件付き書式で、土日祝日は青、会議1が緑、会議2がオレンジまでは 指定したのですが、もう1回会議があり、セルの条件付き書式だと3つまでしか指定できなく、VBAで指定するしかなさそうで困ってます。 なお、会議は別シート(Sheet3)に、計算式で、例えば4月の第2週の金曜日を返すように設定したセルがあり、a1:a31の範囲で、そこを参照して指定した色を返すという方法にしたいのです。 別シートに入力されている会議3には"会議3"と名前を付けてあります。 文字列を参照して返す方法はたくさん質問で出ていたのですが、VBA初心者のため、どこをどういじったらいいのか、全く分かりません。 知恵をお貸し下さい!!

  • 条件付書式のVBA

    条件付書式のVBAについて質問させてください。 A1:A100に「晴れ」「曇り」「雨」「台風」「不明」と入力するとします、するとその行のいくつかセルに色をつけたいです。 たとえば、A1に「晴れ」と入力されたらB1、C1、(D1とばして)E1、F1・・・に色がつく。 できればVBAの式を教えていただけると大変助かります。 どうぞよろしくお願いいたします。

  • エクセルの条件付き書式設定について教えてください

    エクセルの条件付き書式設定について教えてください エクセルで工程表を作成しているのですが、条件付き書式設定で悩んでいます。 以前、こちらで相談させていただいてほとんど問題は解決して作成し終わったのですが・・・ さらに追加で注文をつけられてしまい悩んでいます。 今回の質問は、以前の「開始日と終了日に日付を入れるとその間はセルの色が黒に変わるように設定しているのですが、更に作業内容の項目のFIXという項目の開始日と終了日を入力したときだけセルの色を赤に変わるように設定したいです」に加えて、FIXという文字の前後にも何か文字がはいっている場合でも赤に変わるように設定したいです。 <例>                      7/1 7/2 7/3 A        B(開始日)   C(終了日) キックオフ   7月2日     7月2日 制作      7月8日     7月18日 Flash制作FIX  7月20日    7月20日 FIXの前後に*をつけてFIXを含むみたいにしてみたりもしたのですが、どうもうまくセルの色が赤に変わりません。 最終的には、「もし、A列にFIXという文字が含まれているのなら(FIXのみでも可)、B列とC列に日付を入れたらカレンダーのその日のセルが赤に変わる」というふうにしたいです。 お手数ですが、ご教授お願いします。

  • excelの条件つき書式で

    こんにちは!excel97使用です。 条件つき書式のことなんですが、例えば、   A  B 1 200 100 2 150 160 3  50 100 というデータで、B列のセルの値がA列の同じ行のセルの値より少ないとき、Bの文字色を変えたい、という場合、設定はどうすればいいのでしょうか? 例の場合、1行目のB列100だけ色が変わればいいんですが、1行目のBのセルの設定を2行目以下にコピペすると、全部が1行目のAの値に対して反応してしまいますよね?(わたしだけ???) 1個1個設定すればできるんですが、メンドウなので^^;、一気に条件付けする方法を知りたいです。 宜しくお願いします。

  • EXCEL2003 条件付書式が狂ってくる

    条件付書式は、見ためにどのセルに入っているのかわからないというのと、複数の条件付書式が入ると、なぜかその前に決めていた条件付書式が消えてしまっているということがあって、なかなか不便に思っています。(やりかたが悪いのかもと思うのですが) それで、VBAの entireculumn というのを見つけたのですが、 これで対応できるでしょうか? やりたい事は、 1 2*--------------------------- 3*--------------------------- 4 5 6*--------------------------- 7*--------------------------- 上記のように、「*」をつけた行にだけ、行全体に色をつけておく、 というのを条件付書式で、 「数式が」「=$A1="*"」 としたもので、その設定をしているシートに、横にずっと、いろんな関数を入れていってます。 ですが、関数を入れたり、そのプロセスで列挿入などすると、 色がずれてしまうのです。 その回避策として、VBAで最初に色の設定をしておけないでしょうか? 「*がある行だけに色をつける。」 よろしくお願いします。

  • マクロ 列ごとの条件付き書式

    マクロで列ごとの条件付き書式を作成したいです 条件としては ・列ごとに上限値が1行目に下限値が2行目に入力されている ・3行目以降に測定値が入力される ・その3行目位以降の測定値のセルの書式を上下限値から外れた値は色を変えたい ・50列ほどデータがある (例) A1 10 A2 5 A3~A100 数字 条件をA3~A100に設定 A1(10)より大きいもの、A2(5)より小さいものはセルの色を黄色 B1 15 B2 7  B3~B100 数字 条件をB3~B100に設定 B1(15)より大きいもの、B2(7)より小さいものはセルの色を黄色 こんな感じで列ごとにデータと規格値が入っているものが50列あります。 どうかよろしくお願い致します。

  • 条件付き書式について

    先程質問をさせていただいたのですが問題が発生したため再度質問しました。 条件付き書式の件で下記のような表があるとき(簡素化しています)についてですが 1)B1がマイナスの時A1に色がつく 2)B2がマイナスの時A2に色がつく 3)B3がマイナスの時A3に色がつく・・・・ のように行ごとに条件付き書式を設定したいのですが 1行づつ設定していかないとできないのでしょうか? 行数が100行以上ある為、効率が悪いです。 また、1行条件付き書式を設定して(コピー→形式を選択して貼り付け→書式) 次の行に貼り付けましたが上記1)を元にした場合B2にA2を関連付たいのですが コピーした場合、A1のままになってしまいます。 何か良い方法があれば教えていただきたいです。 ご教授よろしくお願いします。

  • 条件付き書式でセルに色を付けた際のズレ

    OSバージョン:Windows7 Professional SP1 Excelバージョン:Excel2007(12.0.06665.5003) SP3 MSO(12.0.06665.5003) スケジュール表を作成するにあたり、条件付き書式で自動的に該当時刻列のセルに色が付くようにしたいと思っています。 サンプルとして、 ------------------------------------------ 【セルに値を入力】 ・A3:A62に22:00~22:59の時刻を1分刻みで入力(開始時刻列) ・B3:B62に22:01~23:00の時刻を1分刻みで入力(終了時刻列) ・C2:BK2に22:00~23:00の時刻を1分刻みで入力(数式参照用時刻行) 【条件付き書式を設定】 ■数式を使用して、書式設定するセルを決定を選択し、以下の数式を設定 "=IF(C$2>=$A3,IF(C$2<$B3,TRUE,FALSE),FALSE)" ■書式:セルを赤で塗りつぶす ■適用先:"=$C$3:$BK$62" ------------------------------------------ と設定します。 全て開始~終了が1分なので、各行1セルずつ赤色がついて、綺麗に斜めの線が出来る想定なのですが、 6行目、8行目、10行目、12行目以降の行について、2セルずつ赤色がついてしまいます。 こうなってしまう事象原因がお分かりの方はいらっしゃいますでしょうか? よろしくお願いします。