• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAのイベントプロシージャを使って自動的に枠線の色を変えたい。)

VBAで自動的に枠線の色を変える方法

このQ&Aのポイント
  • 質問者はVBAのイベントプロシージャを使用して、表内の特定の条件に基づいて枠線の色を自動的に変えたいと考えています。
  • 具体的には、黒色で塗りつぶされた表内の特定のセルにメロンという値が入力された場合、そのセルとその上下に隣接するセルの枠線の色を自動的に白色に変えたいという要望です。
  • VBAの初心者である質問者は、Worksheet Changeイベントを使用してこの機能を実現しようとしていますが、自力で解決することができず、サンプルコードの提供をお願いしています。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

入門レベルの技術では、そのすべての内容は少し無理ではないでしょうか? 出来るところから手を付けて、どのぐらい書けているのか教えてください。 掲示板に質問を書けば、しょせん、回答者のワザ比べになって、質問者さんの手からは離れてしまいます。どれがどうとか分からないはずです。 ただ、VBAで作るに当たって、自分のしたいことをきちんとまとめることが大事かと思います。 条件をまとめると ・C列の1~20行目までに入力規則があって、「りんご,みかん,メロン」とある。 ・メロンと選択した時だけに、Interior = 黒, Font = 白となる。  そうでない時は、元に戻す。 ・貼り付けはしない。 ----VBAで、ここまでは、出来ると思います。---- ・二つが同じ場合は、その間のBorderの色を反転する  そうでない場合は、元の色(にする。 ・ただし、入力順序は関係ないとする。 こういうことだと思います。もしかしたら、この後に付け足したいという話になるかもしれませんが、まず、VBAを勉強しているなら、自分でぎりぎりまで考えてください。しょせん、私のコードなどが参考になるなんて大それたことを考えて書いているわけではありません。 '// Private Sub Worksheet_Change(ByVal Target As Range)  Const KEYWORD$ = "メロン"  If Intersect(Target, Range("C1:C20")) Is Nothing Then Exit Sub  With Target   If .Row = 1 Then    ColorChange Target, KEYWORD   Else    ColorChange Target.Offset(-1).Resize(3), KEYWORD   End If  End With End Sub Private Function ColorChange(rng As Range, Keywd As String)  Dim c As Range  Const xlColorBlack = 1!  Const xlColorWhite = 2!  For Each c In rng   If c.Value Like Keywd And c.Offset(1).Value Like Keywd Then    c.Resize(2).Borders(xlInsideHorizontal).ColorIndex = xlColorWhite   ElseIf c.Value Like Keywd Then    c.Interior.ColorIndex = xlColorBlack    c.Cells.Font.ColorIndex = xlColorWhite   Else    c.Interior.ColorIndex = xlColorIndexNone    c.Cells.Font.ColorIndex = xlAutomatic    c.Cells.Borders.ColorIndex = xlAutomatic   End If  Next End Function

t-bag-waka
質問者

お礼

回答ありがとうございました。 お察しの通り、現在の自分の力量に見合わない質問です。 確かに回答者全依存の聞き方ですね。 わかってはいたのですが、ご指摘いただいてちょっとお恥ずかしいです。 それでもこうして一例を挙げていただいたことに感謝もしております。 おかげさまでいただいた全ての回答を参考に、目的の物を作ることができました。 入門の私には回答(コード)の中身を一つ一つ紐解いていく作業も勉強になりますよ。 ただ次回があるなら、おっしゃる通り尋ねる範囲といいますか、 本当に身になるようにしたければ、質問の内容を考えた方がもっとよいとも感じています。 VBAに限らず色々と参考になるものがありました。 回答ありがとうございます。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.2

マクロを併用するなら条件付き書式は解除してしまっても構わないですし,逆に2007ですからごりごりとチカラワザで条件付き書式だけで組み立ててもそんなに難しくはない(単に発想だけの問題)の様子です。 練習用のサンプルマクロ: あまり難しく考えず,やるべき事を少し丁寧に淡々と記述していくだけです。 Private Sub Worksheet_Change(ByVal Target As Range)  Dim h As Range  Dim ha As Range  Dim hx As Range  On Error Resume Next  Set hx = Application.Intersect(Target, Range("C1:C20"))  If hx Is Nothing Then Exit Sub  For Each ha In hx.Areas   For Each h In ha    If h = "メロン" Then     h.Interior.ColorIndex = 1     h.Font.ColorIndex = 2        If h.Offset(-1) = "メロン" Then      Range(h, h.Offset(-1)).Borders(xlInsideHorizontal).ColorIndex = 2     End If     If h.Offset(1) = "メロン" Then      Range(h, h.Offset(1)).Borders(xlInsideHorizontal).ColorIndex = 2     End If    Else     h.Interior.ColorIndex = xlNone     h.Font.ColorIndex = xlAutomatic     h.Borders.ColorIndex = xlAutomatic    End If   Next  Next End Sub 練習用の条件付き書式 条件1 C1からC19まで 数式が =AND(C1="メロン",C2="メロン") で下の罫線を白に 条件2 C2からC20まで 数式が =AND(C1="メロン",C2="メロン") で上の罫線を白に 条件3 C1からC20まで セルの値が 次の値に等しい メロン でセルの塗りつぶしを黒,文字色を白に。

t-bag-waka
質問者

お礼

回答ありがとうございました。 全ては条件付き書式で可能なことだったのですね。 実はそのことも知らず…、お恥ずかしい限りです。 それでもいただいたコードを元に、目的の物を完成させることができました。 現状VBAではこのようにおんぶにだっこですが、 早く自分で考えられるレベルに達したいものです。 素早い回答ありがとうございました。

すると、全ての回答が全文表示されます。
  • mar00
  • ベストアンサー率36% (158/430)
回答No.1

それは条件付き書式で出来たりするのでは?

t-bag-waka
質問者

お礼

最初に、えっ…!?、と思ってしまいました。 本当にお恥ずかしいです。 出直してきますね。 回答ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A