[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『入力があれば色塗り』(okada)
VBAは余り詳しくないので教えて頂きたいのですが
N列に入力があったら色塗り Deleteしたら色消しをしたいのですが
以下は参考です。ボタンクリックなら可能です
色塗り利範囲はA〜O列です。
よろしくお願いします。
Dim rng As Range Dim n As Long If Not TypeOf Selection Is Range Then Exit Sub Set rng = Intersect(Selection.EntireRow, Range("A:O")) With rng.Interior If IsNull(.ColorIndex) Or rng.Interior.ColorIndex = xlColorIndexNone Then .ColorIndex = 6 '.Color = vbGreen Else .ColorIndex = xlColorIndexNone End If End With
< 使用 Excel:Excel2013、使用 OS:Windows7 >
条件付き書式ではだめですか? http://www.excel.studio-kazu.jp/lib/e2qw/e2qw.html (稲葉) 2014/10/21(火) 10:04
良ければマクロである必要がある理由も聞かせてもらいたいけど・・・
どちらか使いやすい方選んでください。 後者はシートモジュールに記述してください。 後者は複数行・列を変更した場合に対応しておりません。
個別実行 Sub 色つけ() Dim N列, r As Range, n N列 = Filter([TRANSPOSE(IF(N1:N100<>"",ROW(N1:N100),CHAR(2)))], Chr(2), False) If UBound(N列) = -1 Then Exit Sub Set r = Cells(N列(0), "A").Resize(, [CODE("O")-CODE("A")+1]) For n = 1 To UBound(N列) Set r = Union(r, Cells(N列(n), "A").Resize(, [CODE("O")-CODE("A")+1])) Next n Range("A1:O100").Interior.ColorIndex = xlNone r.Interior.ColorIndex = 6 End Sub
イベントタイプ Private Sub Worksheet_Change(ByVal Target As Range) If Left(Target.Address, 3) <> "$N$" Then Exit Sub If Target.CountLarge > 1 Then Exit Sub With Target.Offset(, [CODE("A")-CODE("N")]).Resize(, [CODE("O")-CODE("A")+1]).Interior If Target.Value <> "" Then .ColorIndex = 6 Else .ColorIndex = xlNone End If End With End Sub (稲葉) 2014/10/21(火) 11:37
食わず嫌い?
Sub Sample() With Range("A:O") .Cells(1, 1).Activate .FormatConditions.Delete .FormatConditions.Add Type:=xlExpression, Formula1:="=$N1<>""""" .FormatConditions(.FormatConditions.Count).SetFirstPriority .FormatConditions(1).Interior.ColorIndex = 6 .FormatConditions(1).StopIfTrue = True End With End Sub (Mook) 2014/10/21(火) 11:55
Mookさん
ありがとうございます。
できればWorksheet_Changeでやりたかったので
参考にさせていただき今後利用させてください。
(okada) 2014/10/21(火) 12:44
OffsetとRisizeの引数に、計算式で数値を当てはめているだけです。 []は計算式です。 Target _ .Offset(, [CODE("A")-CODE("N")]) _ .Resize(, [CODE("O")-CODE("A")+1])
単純に-13とか、15でもよかったんですが マジックナンバー減らそうかなと思いました・・・ 何となくA列引くN列って後で見た人が分かってもらえたらなーと考えていましたが、 逆に混乱のもと?
[]はEvaluateメソッドの省略形です。 詳細はヘルプを参照してください。 CODEはワークシートの関数です。
それより片手落ちですがいいんですか? 一気に値を消したときとか対応していませんよ? (稲葉) 2014/10/21(火) 13:12
>いくつかのセルを一気にDeleteしてみたのですが何も問題ないようです 問題ないならいいですけど、たとえばN列に値が入っていて、一気に消すと色残りますよね?
>ヘルプ見ましたが理解できるまでいきませんでした。 何がわからないの?
>列指定ですがColumnとかで指定する方法は出来ないのでしょうか? 行単位に色つけたいのに、Column使って何がしたいのですか?
Offsetの必要はありませんが、 Range("A" & Target.Row & ":" & "O" & Target.Row) と書くのとどっちが見やすいかは人それぞれだと思います。
やっぱり条件付き書式をお勧めします。
(稲葉) 2014/10/21(火) 22:09
Range("A" & Target.Row & ":" & "O" & Target.Row) こちらの方があとあと修正しやすいのでは無いかと思うのですが
以下のどこに記入すればいいのでしょうかWith Target.Offset・・の部分に
書き込んで見たのですがエラーが出てしまいました。
Private Sub Worksheet_Change(ByVal Target As Range) If Left(Target.Address, 3) <> "$N$" Then Exit Sub If Target.CountLarge > 1 Then Exit Sub With Target.Offset(, [CODE("A")-CODE("N")]).Resize(, [CODE("O")-CODE("A")+1]).Interior If Target.Value <> "" Then .ColorIndex = 6 Else .ColorIndex = xlNone End If End With End Sub (okada) 2014/10/22(水) 01:15
どのように入れたのか、どのようなエラーになったのか教えてください。
それから二回目のレスの問と、前回の二つの問に答えていただけていないのですが?
>良ければマクロである必要がある理由も聞かせてもらいたいけど・・・
>>いくつかのセルを一気にDeleteしてみたのですが何も問題ないようです >問題ないならいいですけど、たとえばN列に値が入っていて、一気に消すと色残りますよね?
>>ヘルプ見ましたが理解できるまでいきませんでした。 >何がわからないの? (稲葉) 2014/10/22(水) 06:53
(okada) 2014/10/22(水) 09:45
>。★から右に書いてみました。? まず変数の型からご理解ください。 TargetはWorksheet_Changeイベントの引数で、Range型です。 Range.Rangeというプロパティ乃至メソッドは存在しません。
前々のレスで >通常Rangeで指定すると思うのですが・・・ と有りましたので、Range.Interiorが分かっていらしたのかと思っていました。
本題ですが、TragetからはRowプロパティで取得した値を使用していますので >With Target.Offset(, [CODE("A")-CODE("N")]).Resize(, [CODE("O")-CODE("A")+1]).Interior これを With Range("A" & Target.Row & ":" & "O" & Target.Row).Interior としてください。
>特に考えたわけでは無いですが主観的にMacroを希望しました 色を付けたセルをカウントしたい等でしたら、マクロを希望されるのも分かりますが、 今回の例でマクロを使う必要性を感じません。 一番オーソドックスな条件付き書式を使う形ですので、是非今回から活用してみてください。
>なぜCODE("A")マイナスCODE("N")なのかが理解できなかっのです。 ワークシートに=CODE("A")と=CODE("N")を別々のセルに入力してみてください。 そうすれば何となくやりたいことが理解しやすくなると思います。
(稲葉) 2014/10/22(水) 09:58
(okada) 2014/10/22(水) 12:04
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.