• 締切済み
  • 困ってます

エクセルのアクティブセルの色を変えるには

エクセルについて質問させて頂きます。 エクセルのアクティブになったセルの色を変えたいのですが Private m_ROW As Long '変更前の行番号 Private m_IRO As Long '変更前の色 Private Const MYCOLOR As Long = 36 '変更する色番号 Private Sub Worksheet_SelectionChange(ByVal Target As Range) '選択した行に色を付ける If Target.Row > 1 Then '2行目以降を対象とする '変更前の色に戻す If m_ROW <> 0 Then Rows(m_ROW).Interior.ColorIndex = m_IRO End If '変更前の行番号と色を記憶 m_ROW = Target.Row m_IRO = Rows(Target.Row).Interior.ColorIndex '色を変更 Rows(Target.Row).Interior.ColorIndex = MYCOLOR End If End Sub 上記の表記で行単位の変更は出来たのですが、セル単位での変更方法が分かりません。 変更の条件として、 ・アクティブなセルの色のみを変える ・アクティブからノンアクティブになった場合、前回指定されていた色へ戻す。 といった風にする事は可能でしょうか? 可能であればぜひご教授お願いいたします。

共感・応援の気持ちを伝えよう!

  • 回答数5
  • 閲覧数2617
  • ありがとう数1

みんなの回答

  • 回答No.5

質問のコードは自分で書いたの? これだけのスキルがあるなら、解説なし Private m_ROW As Range '変更前の行番号 Private m_IRO As Variant '変更前の色 Private Const MYCOLOR As Long = 36 '変更する色番号 Sub test() '選択した行に色を付ける Dim Target As Range Dim i As Integer Dim 処理対象セル As Range Dim 処理対象セル色 As String Set Target = Selection If Target.Row > 1 Then '2行目以降を対象とする '変更前の色に戻す If Not m_ROW Is Nothing Then i = 0 For Each 処理対象セル In m_ROW 処理対象セル.Interior.ColorIndex = CInt(m_IRO(i)) i = i + 1 Next Set m_ROW = Nothing m_IRO = "" Else '変更前の行番号と色を記憶 Set m_ROW = Target For Each 処理対象セル In m_ROW m_IRO = m_IRO & " " & 処理対象セル.Interior.ColorIndex Next m_IRO = Split(Trim(m_IRO)) '色を変更 Target.Interior.ColorIndex = MYCOLOR End If End If End Sub 以上 どんな処理をするかは、コードから読み取ってね

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • エクルで選択した行に色をつけて見易くしたい

    エクセルで選択した行に色をつけて見易くしたいと思い、以下のVBAを見つけて実行してみましたが、元のセルに色がついているとエラーが出てしまいます。 解決方法はないものでしょうか? Private m_ROW As Long '変更前の行番号 Private m_IRO As Long '変更前の色 Private Const MYCOLOR As Long = 36 '変更する色番号 Private Sub Worksheet_SelectionChange(ByVal Target As Range) '選択した行に色を付ける If Target.Row > 1 Then '2行目以降を対象とする '変更前の色に戻す If m_ROW <> 0 Then Rows(m_ROW).Interior.ColorIndex = m_IRO End If '変更前の行番号と色を記憶 m_ROW = Target.Row m_IRO = Rows(Target.Row).Interior.ColorIndex '色を変更 Rows(Target.Row).Interior.ColorIndex = MYCOLOR End If End Sub どなたかお助けください、、宜しくお願い致します。

  • セルの選択でその行に色を付けたい

    横に長いデータがあり、その1つのセルを選択するとその行全体に色が付くようにしたいのです。過去の質問で以下のようなものを見つけましたが、問題はその場合、通常のコピー→貼り付けができない点です。 その辺を問題なく行える方法はないでしょうか? よろしくお願いいたします。 Public m, n Private Sub Worksheet_SelectionChange(ByVal Target As Range) If m <> 0 Then Range(Cells(m, 1), Cells(m, 256)).Interior.ColorIndex = n End If m = Target.Row n = Target.Interior.ColorIndex Range(Cells(Target.Row, 1), Cells(Target.Row, 256)).Interior.ColorIndex = 6 End Sub

  • Excelで選択しているセルの行を色づけしたい

    以前、このサイトでVBAを以下のように設定したのですが、 一度、ファイルを閉じてしまうと、無効になってしまいます。どうすれば、いいのでしょうか? Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) ActiveSheet.Rows.Interior.ColorIndex = xlNone Rows(Target.Row).Interior.ColorIndex = 15 End Sub

  • 回答No.4
  • xls88
  • ベストアンサー率56% (669/1189)

★(1)を追加すればどうでしょうか。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) '選択したセルに色を付ける   If Target.Count > 1 Then Exit Sub '★(1)   If Target.Row > 1 Then '2行目以降を対象とする     '変更前の色に戻す     If m_ROW <> "" Then       Range(m_ROW).Interior.colorIndex = m_IRO     End If     '変更前のセル番地と色を記憶     m_ROW = Target.Address     m_IRO = Target.Interior.colorIndex     '色を変更     Target.Interior.colorIndex = MYCOLOR   End If End Sub

共感・感謝の気持ちを伝えよう!

  • 回答No.3

marukyu-さんがご提示になった行の色を変えるコードも複数色があれば同じ結果になったはずと思います。 単にエラーをスキップするだけでよいなら、On Error Resume Nextを挿入すればよいのですが、そうすると前の状態にもどらなくなります。 複数色に対応するなら、各色を配列として取り込んでもとにもどすことになるのかな。でもどれだけの範囲があるのかわからないので配列で対応できるかどうかわかりません。 簡単な手段としては、オリジナルのシートを複製して用意しておき、色を元に戻す際は複製シートをコピーして書式の貼り付けをすればよいと思います。 複製したシート名を"Copy"だとすると、そのシートのモジュールにはコードを書かず、オリジナル(今)のシートのコードを以下のように変えてみてください。 Private Const MYCOLOR As Long = 36 '変更する色番号 Private Sub Worksheet_SelectionChange(ByVal Target As Range) With Application .ScreenUpdating = False If Target.Row = 1 Then Exit Sub Sheets("Copy").Cells.Copy .EnableEvents = False On Error GoTo line Cells.PasteSpecial Paste:=xlFormats .CutCopyMode = False Target.Interior.ColorIndex = MYCOLOR Target.Select line: .EnableEvents = True .ScreenUpdating = True End With End Sub

共感・感謝の気持ちを伝えよう!

  • 回答No.2

こんな感じでしょうか。 Private m_CELL As Range '変更前のセル Private m_IRO As Long '変更前の色 Private Const MYCOLOR As Long = 36 '変更する色番号 Private Sub Worksheet_SelectionChange(ByVal Target As Range) '選択したセルに色を付ける If Target.Row > 1 Then '2行目以降を対象とする '変更前の色に戻す If Not m_CELL Is Nothing Then m_CELL.Interior.ColorIndex = m_IRO End If '変更前のセルと色を記憶 Set m_CELL = Target m_IRO = Target.Interior.ColorIndex '色を変更 Target.Interior.ColorIndex = MYCOLOR End If End Sub

共感・感謝の気持ちを伝えよう!

質問者からの補足

お答えを頂きありがとうございます。 ほぼ思ったとおりのもの名のですが、2色以上の色を含むセルを範囲選択すると m_IRO = Target.Interior.ColorIndex の部分で 実行時エラー94 nullの使い方が不正です とエラーが出てしまいます。 範囲指定をした時にエラーが出ないようにすることは可能でしょうか。

  • 回答No.1
  • xls88
  • ベストアンサー率56% (669/1189)

TargetのAddressとInterior.colorIndexを記憶するように変更するだけです。 Private m_ROW As String '変更前のセル番地 Private m_IRO As Long '変更前の色 Private Const MYCOLOR As Long = 36 '変更する色番号 Private Sub Worksheet_SelectionChange(ByVal Target As Range) '選択した行に色を付ける   If Target.Row > 1 Then '2行目以降を対象とする   '変更前の色に戻す   If m_ROW <> "" Then     Range(m_ROW).Interior.colorIndex = m_IRO   End If   '変更前のセル番地と色を記憶   m_ROW = Target.Address   m_IRO = Target.Interior.colorIndex   '色を変更   Target.Interior.colorIndex = MYCOLOR End If

共感・感謝の気持ちを伝えよう!

質問者からの補足

お答えを頂きありがとうございます。 ほぼ思ったとおりのもの名のですが、2色以上の色を含むセルを範囲選択すると m_IRO = Target.Interior.ColorIndex の部分で 実行時エラー94 nullの使い方が不正です とエラーが出てしまいます。 範囲指定をした時にエラーが出ないようにすることは可能でしょうか。

関連する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

  • コンパイルエラー 属性が違う?

    はじめて、質問させていただきます。 マクロの勉強を始めたばかりの初心者ですが、こちらの質問や回答を拝見し、勉強させて頂いております。 早速ですが過去の質問で『選択行のセルの色を変更する』というマクロ(下記のコード)があったのですが、私にとっては実用的で魅力のあるコードでしたので活用させて頂いております。現在シートに、このコードを記録してシートがアクティブになった時に実行させているのですが、これを単純にマクロ(1)とマクロ(2)にコードを記載してマクロの実行で、有効と無効に出来るようにしたいのですが、『コンパイルエラー 属性が適切ではありません』というエラーになります。 現在、私のスキルはマクロの記録で覚えさせたコードを組み合わせる位のレベルです。 初歩的でお恥ずかしい質問ですが、ご指導下さい。 ----------コード---------- Private m_ROW As Range '変更前の行番号 Private m_IRO As Variant '変更前の色 Private Const MYCOLOR As Long = 36 '変更する色番号 Sub test() '選択した行に色を付ける Dim Target As Range Dim i As Integer Dim 処理対象セル As Range Dim 処理対象セル色 As String Set Target = Selection If Target.Row > 1 Then '2行目以降を対象とする '変更前の色に戻す If Not m_ROW Is Nothing Then i = 0 For Each 処理対象セル In m_ROW 処理対象セル.Interior.ColorIndex = CInt(m_IRO(i)) i = i + 1 Next Set m_ROW = Nothing m_IRO = "" Else '変更前の行番号と色を記憶 Set m_ROW = Target For Each 処理対象セル In m_ROW m_IRO = m_IRO & " " & 処理対象セル.Interior.ColorIndex Next m_IRO = Split(Trim(m_IRO)) '色を変更 Target.Interior.ColorIndex = MYCOLOR End If 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) 不可能でしょうか?

  • VBAでのセルの複数選択時の処理について

    現在EXCEL VBAである行の値が変わったときにその列の塗りつぶしの 色を変えるといった処理を作成しております。 そこで、複数選択して値を変えた場合の処理が変数の型が一致しません 的なエラーが表示されてしまいます。 どのように修正したらうまくいくでしょうか? 教えてください。 ソースは下記の通りとなります。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column <> 13 Then Exit Sub Application.EnableEvents = False MsgBox (Target.Rows.Count) Dim rngSelectRng As Range For Each rngSelectRng In Target If rngSelectRng.Value = "" Then rngSelectRng.Value = " " 'ステータス欄の入力の判断 'Select Case Target.Rows.Value MsgBox (Target.Row) Select Case rngSelectRng.Value Case "あああ" Worksheets("表1").Rows(Target.Row).Interior.ColorIndex = 24 Case "いいい" Worksheets("表1").Rows(Target.Row).Interior.ColorIndex = 35 Case "ううう" Worksheets("表1").Rows(Target.Row).Interior.ColorIndex = 38 Case "えええ" Worksheets("表1").Rows(Target.Row).Interior.ColorIndex = 36 Case "おおお" Worksheets("表1").Rows(Target.Row).Interior.ColorIndex = 16 Case Else Worksheets("表1").Rows(Target.Row).Interior.ColorIndex = 2 End Select Next Application.EnableEvents = True End Sub

  • エクセルで選択中の列や行を見やすくしたい

    タイトルのとおり、選択中の列や行の色が一列全部変るように したいと思い調べ、以下のVBEコードを見つけたんですが Public m Private Sub Worksheet_SelectionChange(ByVal Target As Range)  If m <> 0 Then   Range(Cells(m, 1), Cells(m, 256)).Interior.ColorIndex = xlNone  End If  Range(Cells(Target.Row, 1), Cells(Target.Row, 256)).Interior.ColorIndex = 6  m = Target.Row End Sub 確かに色は変るんですが、もともとついている箇所の色が 消えていってしまいます。 色が消えずに同じことは出来ないでしょうか。 ご存知の方いらっしゃいましたら教えてください。 よろしくお願いします。

  •  条件付き書式での色付けで以下のコードを教えて頂いたんですが、色付けを

     条件付き書式での色付けで以下のコードを教えて頂いたんですが、色付けを 適用する範囲をどうやって変更すればいいのでしょうか? もしよろしければ、範囲の変更の仕方と、コードの意味を教えて頂けますか? めんどうですがよろしくお願いします・・・。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Columns(3).Interior.ColorIndex = xlNone Dim i, j As Long For i = 1 To Cells(Rows.Count, 3).End(xlUp).Row For j = 1 To Cells(Rows.Count, 6).End(xlUp).Row If Cells(i, 3) = Cells(j, 6) Then Cells(i, 3).Interior.ColorIndex = Cells(j, 7).Interior.ColorIndex End If Next j Next i End Sub

  • エクセル VBA セルの色をSheet1とSheet2の両方を変えたいのですが・・・

    最近困っているところが表題の通りなのですが Sheet1のB2を右クリックするとB2のセルの色を変えて Sheet2のB2のセルも色を変えたいというものです。 現状で Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) Dim Rng As Range, myRng As Range Dim RngA As Range, myRngA As Range Set Rng = Range("B3:W3,b7:w8,b12:w12,d13:w13,d17:w18,d22:w23") Set myRng = Intersect(Target, Rng) If myRng.Interior.ColorIndex = xlColorIndexNone Then myRng.Interior.ColorIndex = 37 Else If myRng.Interior.ColorIndex = 37 Then myRng.Interior.ColorIndex = 45 Else myRng.Interior.ColorIndex = xlColorIndexNone End If End If Cancel = True End Sub とここまではあるのですが、これをどう改造すればSheet2の同じセルの色もかわるのでしょうか? 宜しくお願いいたします

  • エクセル マクロ 複数セルの色付けについて

    マクロ初心者で苦戦しており、教えていただけると大変ありがたいです。 エクセルの複数のシートに、問2_1 、問2_2 、問2_10 (全部で問は2_28まであります)等の文字列があり、その文字に合わせて、そのセルだけ色を付けたいと考えております。 今書いているコードだと、ワークシートのA列にある場合は色が付けられるのですが、それ以外に色が付けられません。どこが間違っているでしょうか? どうぞご指導お願いいたします。 Sub 色つけ() Dim Maxrow As Long Dim i As Long Maxrow = Cells(Rows.Count, i).End(xlUp).Row For i = 1 To Maxrow If InStr(Cells(i, 1), "2_1 ") > 0 Then Cells(i, 1).Interior.ColorIndex = 6 If InStr(Cells(i, 1), "2_2 ") > 0 Then Cells(i, 1).Interior.ColorIndex = 6 If InStr(Cells(i, 1), "2_23 ") > 0 Then Cells(i, 1).Interior.ColorIndex = 23 If InStr(Cells(i, 1), "2_13 ") > 0 Then Cells(i, 1).Interior.ColorIndex = 4 If InStr(Cells(i, 1), "2_6 ") > 0 Then Cells(i, 1).Interior.ColorIndex = 7 Next i End Sub

  • アクティブセルの右側にユーザーフォームから入力したい。

    アクティブセルの右側にユーザーフォームから入力したい。 すいません初心者で困ってます。 Private Sub Worksheet_Change(ByVal Target As Range) With Target If .Column = 7 Then '色付けをColumn=??に限定 Select Case .Value '反応させる文字列の入力と(.Row ?)~(.Row?)で色塗り範囲指定 Case "完了" Range(Cells(.Row, 3), Cells(.Row, 13)).Interior.ColorIndex = 0 UserForm2.Show Case "提出中" Range(Cells(.Row, 3), Cells(.Row, 13)).Interior.ColorIndex = 6 Case Else Range(Cells(.Row, 3), Cells(.Row, 13)).Interior.ColorIndex = 0 End Select End If End With End Sub 台帳を作ってるんですが、リストから選択して”完了”と入力されるとUserForm2が開いて完了日を入力したいと思っております。 UserForm2はスピンボタンでそこそこ完成したんですが、”完了”に切り替えたセルの隣のセルに入力の方法が分からなくて困っております。 どなたか御教授ください。

  • エクセルVBAでクリックしたセルのみ書式を変えたいのです。

    Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) If Target.Row <= 11 And Target.Column <= 11 Then With Selection .Interior.ColorIndex = 3 .Font.ColorIndex = 2 .Font.Bold = True End With End If End Sub これで出来るのですが、問題は別のセルに移動しても書式は変ったままなのです。(当り前ですが) 書式を変えるのはあくまで選択されている間だけにしたいのです。 どのようにすればよいのでしょうか? エクセル97です。

専門家に質問してみよう