『入力があれば色塗り』(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 ---- 稲葉さん ありがとうございます。 リンク先見ましたができればVBAで実行したいのですが よろしくお願いします。 (okada) 2014/10/21(火) 11:11 ---- 良ければマクロである必要がある理由も聞かせてもらいたいけど・・・ どちらか使いやすい方選んでください。 後者はシートモジュールに記述してください。 後者は複数行・列を変更した場合に対応しておりません。 個別実行 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 ---- 稲葉さん ありがとうございます。 イベントがいいですね(^_^;) ひとつ聞きたいことがあるのですが [CODE("A")-CODE("N")] ↑の書き方ですが、初めて見ます 通常Rangeで指定すると思うのですが・・・ 意味おしえていただけないでしょうか Rangeでは指定できるのでしょうか? よろしくお願いします。 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してみたのですが何も問題ないようですが どういうことでしょうか? また ヘルプ見ましたが理解できるまでいきませんでした。 列指定ですがColumnとかで指定する方法は出来ないのでしょうか? やはりOffsetで指定するのが普通でしょうか? 何度も申し訳ありませんが よろしくお願いします。 (okada) 2014/10/21(火) 17:51 ---- >いくつかのセルを一気に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 ---- 稲葉さん ありがとうございます。何度もすみません >どのように入れたのか、どのようなエラーになったのか教えてください。 >以下のどこに記入すればいいのでしょうかWith Target.Offset・・の部分に >書き込んで見たのですがエラーが出てしまいました。★から右に書いてみました。? With Target.★Offset(, [CODE("A")-CODE("N")]).Resize(, [CODE("O")-CODE("A")+1]).Interior >良ければマクロである必要がある理由も聞かせてもらいたいけど・・・ 特に考えたわけでは無いですが主観的にMacroを希望しました 別Bookで条件付書式も利用したいと思います。 >たとえばN列に値が入っていて、一気に消すと色残りますよね? こちらはOKです。 例えば[CODE("A")-CODE("N")]が なぜCODE("A")マイナスCODE("N")なのかが理解できなかっのです。 こんな状態ですがよろしくお願いします。 (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 ---- 稲葉さん 昨日から長々とありがとうございました。 > >なぜCODE("A")マイナスCODE("N")なのかが理解できなかっのです。 > ワークシートに=CODE("A")と=CODE("N")を別々のセルに入力してみてください。 > そうすれば何となくやりたいことが理解しやすくなると思います。 文字列の先頭文字を表す数値コードを返します。なぜ"A"が65なのか これから調べて見ます。 今後共よろしくお願いします。 感謝 (okada) 2014/10/22(水) 12:04