Excel VBAでセルの背景色を変更する方法

このQ&Aのポイント
  • VBAを使用して、フォントではなくセルの背景色を変更する方法を知りたいです。また、A列からF列までのセルのみを対象にして、G列以降のセルの色は変更しないようにしたいです。
  • 私はVBAについて勉強したことがないため、どうすれば良いかわかりません。試しに以下のコードを実行してみましたが、うまく動作しませんでした。
  • Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column > 6 Then Exit Sub Target.Interior.Color = RGB(255, 0, 0) End Sub 3行目の`Target.~`の部分でエラーが発生しています。正しい方法を教えていただけますか?
回答を見る
  • ベストアンサー

エクセル VBA 変更→セルの色が変わる

http://okwave.jp/qa/q2601257.html ↑こちらの質問に近いのですが、  ・フォントではなくセルの背景色を変える  ・A列からF列までのみ対象:G列以降は変更しても色が変わらない としたいのです。どのようにすれば良いのでしょうか。 VBAについては全く体系だって勉強したことがないので良く分かっていません。 見よう見まねで以下のようにしてみましたが、うまくいきませんでした。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column > 6 Then Exit Sub Target.Interior.Color = RGB(255, 0, 0) End Sub 3行目のTarget.~の所が黄色に示されてエラーがでます。 どのようにしたら上手くいくかご教示下さい。

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

  • ベストアンサー
  • mar00
  • ベストアンサー率36% (158/430)
回答No.2

Target.Interior.Color = RGB(255, 0, 0)の部分を Target.Interior.ColorIndex = 37のように。 37は色の番号ですので、好みの色に変更して下さい。

kanao_
質問者

お礼

ありがとうございます。 必要な部分だけ色がつくようになりました。

その他の回答 (1)

noname#131542
noname#131542
回答No.1

例えば RANGE("A1:F66536").INTERIOR.COLORINDEX=3 とかではダメなの? ちなみに最後入る数字は1-26の間 エクセルのヴァージョンがわからないけど2003までなら65536行までしかないので 2010となると永遠に状態だと思うけど

kanao_
質問者

お礼

ありがとうございます。 残念ながら、エクセル2003ですがうまくいきませんでした。

関連するQ&A

  • VBAのセルの色の設定について

    EXCEL・VBAにて.Interior.Color=RGB(152, 251, 152)と設定しましたが 思った色(緑系の色)ではなくグレー系の色になってしまったのですが、 何か間違っているのでしょうか? 何かわかる方いらっしゃいますでしょうか? 実際のソースはしたの通りとなります。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column <> 13 Then Exit Sub Application.EnableEvents = False 'ステータス欄の入力の判断 Select Case Target.Value Case "あああ" Worksheets("シート1").Rows(Target.Row).Interior.Color = RGB(152, 251, 152) Case "いいい" Worksheets("シート1").Rows(Target.Row).Interior.Color = RGB(254, 208, 224) Case "ううう" Worksheets("シート1").Rows(Target.Row).Interior.Color = RGB(255, 255, 0) Case "えええ" Worksheets("シート1").Rows(Target.Row).Interior.Color = RGB(192, 192, 192) Case Else Worksheets("シート1").Rows(Target.Row).Interior.Color = RGB(255, 255, 255) End Select Application.EnableEvents = True End Sub

  • エクセルVBAのイベントについて教えてください。

    エクセルVBA初学者のです。 "C9"にいれるとchangeイベントが発生するコードなんですが、 "C9"のほかに"D1"においてもchangeイベントを発生させたいのですが 下記のコードに続けて書いてもイベントが発生しないのですが どのように書けばよいのでしょうか? private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("C9")) Is Nothing Then Exit Sub Range("H14:H56").Interior.ColorIndex = 2 If Intersect(Target, Range("D1")) Is Nothing Then Exit Sub Range("G14:G56").Interior.ColorIndex = 2 End Sub よろしくお願いします。

  • 別の列のデータを検索してセルの色を変える

    Private Sub Worksheet_Change(ByVal Target As Range) If (Target.Column <> 1) And (Target.Column <> 5) Then Exit Sub If Not IsNumeric(Target.Value) Then Exit Sub Target.Offset(0, 1).Value = Now() End Sub 上記のスクリプトで 「1列目にナンバーを記入すると2列目に、5列目にナンバーを記入すると6列目に時刻が自動的にセルに入る」ようになっています。 これに追加で 「5列目にナンバーが記入されると、そのナンバーと同じものを1列目から探し出して、1列目のセルの色を薄い青にする。なければなしとアラートを出す」 ように改造したいのですが どうすればいいでしょうか? どうかお願いいたします。

  • エクセルVBAでセル変化したら別のセルへコピーする

    おはようございます。VBAをはじめて浅い初心者です。 あるセルに数字および文字列が入力されたら違うセルへコピーしたいのですがどのようにすればできますか。 Private Sub Worksheet_Change(ByVal Target As Range)とか 使用してつくればいいのですか?教えてください。

  • エクセルVBAについて

    http://okwave.jp/qa/q7236213.html 上記質問の発展形なのですが 同様のことを E列に日付 F列に売上 G列に結果 でやりたいのですが この時A列~C列のマクロも残したままでしたいのですが 下記のように同様のプロシージャーを下段に書けばできると思ったのですが うまくいきません。 Private Sub worksheet_change(ByVal Target As Excel.Range) If Target.Address <> "$A$1" Then Exit Sub If Target = "" Then Exit Sub Range("C10:C65536").ClearContents With Range(Cells(9 + Range("A1").Value, "C"), Cells(Range("A65536").End(xlUp).Row, "C")) .FormulaR1C1 = "=MAX(RC2:R[" & -Range("A1").Value + 1 & "]C2,FALSE)" .Value = .Value End With End Sub Private Sub worksheet_change(ByVal Target As Excel.Range) If Target.Address <> "$E$1" Then Exit Sub If Target = "" Then Exit Sub Range("G10:G65536").ClearContents With Range(Cells(9 + Range("E1").Value, "G"), Cells(Range("E65536").End(xlUp).Row, "G")) .FormulaR1C1 = "=MAX(RC6:R[" & -Range("A1").Value + 1 & "]C6,FALSE)" .Value = .Value End With End Sub どなたかお知恵を拝借できませんでしょうか?

  • エクセルで特定の文字列の含まれるセルのある行の色を変更したいと思ってお

    エクセルで特定の文字列の含まれるセルのある行の色を変更したいと思っておりますが、関数では出来ないようなのでVBAで作業をしております。なかなかうまくいかずで困ってしまっております。 下記のような関数でシート一枚は出来たのですが、それ以外のシートには反映がされません。 Private Sub Worksheet_Change(ByVal Target As Range) Dim r As Range If Application.Intersect(Target, Range("A2:A10000")) Is Nothing Then Exit Sub For Each r In Target If r.Column = 1 Then Select Case r.Value Case "○": r.Resize(1, 12).Interior.ColorIndex = 19 Case "×": r.Resize(1, 12).Interior.ColorIndex = 3 Case "△": r.Resize(1, 12).Interior.ColorIndex = 6 Case Else: r.Resize(1, 12).Interior.ColorIndex = xlNone End Select End If Next r End Sub 無知なので、ネットで調べて上記のような数式を拾ってきたのですが、どうやら1シート分の設定に書かれているようです。。。 全シートに反映がされるように設定をするにはどこをどのように書き換えればよろしいでしょうか。 お分かりの方がいらっしゃいましたら、よろしくお願いいたします。

  • エクセルVBAで Cancel=Trueの使い方

    Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$A$1" Then Exit Sub Cancel = True MsgBox "キャンセルしました" End Sub Private Sub Worksheet_Deactivate() Cancel = True MsgBox "キャンセルしました" End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) Cancel = True MsgBox "キャンセルしました" End Sub 以上のように使ってみましたが、どれも「キャンセルしました」とメッセージは出るものの、直前の操作(入力、シート切替、セル移動)はキャンセルされませんでした。 どこが間違っているのでしょうか?

  • エクセルでセルをクリアされたら、自動的にセルの色を変更したい

    エクセルで、セルの値がDeleteキーなどでクリアされた場合に、 自動的にセルの色がかわるようにしたいのですが、 何かよい方法はないでしょうか? セルの内容が変更された場合のフォントの色を変えるために、 Private Sub Worksheet_Change(ByVal Target As Range) Target.Font.ColorIndex = 3 End Sub というマクロは設定しています。 これだとクリアされた場合、わからないので。。。 よろしくお願いします。

  • エクセルのVBAについて教えてください。

    エクセルのVBAについて教えてください。 下記のような構文で、Dの行にAやBの文字が入力された時、その都度 セルの色が変わるようにはできたのですが、本当は、「C5」セルに文字が 入力された時、「C5」だけでなく「B5:J5」の範囲でセルの色を変えたい のですが、どうすれば良いのでしょうか。 ご存知の方是非教えてください。 Private Sub Worksheet_Change(ByVal Target As Range) Dim myColor As Integer If Target.Count > 1 Then Exit Sub If Target.Column <>4 Then Exit Sub Select Case Target.Value Case "A" myColor = 34 '水色 Case "B" myColor = 40 '肌色 Case Else myColor = xlNone End Select Target.Interior.ColorIndex = myColor End Sub

  • マクロでセルの色を塗りたい

    マクロでセルの色を塗りたいです。 現在、予めRGBの値を取得しておいて Private Sub Worksheet_Change(ByVal Target As Range)   Dim R As Integer   Dim G As Integer   Dim B As Integer   R = 100   G = 50   B = 128   If Target.Value = "A" Then     Target.Interior.Color = RGB(R, G, B)   End If End Sub のように使っています。 このRGBの値を他の所で流用するに当たって、1つの変数のまとめたいのですが、 RGBをまとめて代入?する方法はあるでしょうか。 以下のような使い方をしたいです(勿論これはダメでしたけど。見るからにダメそうですし)。  Dim IRO As String  IRO = "100, 50, 128"  Target.Interior.Color = RGB(IRO) 不可能でしょうか?

専門家に質問してみよう