• 締切済み

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

エクセルについて質問させて頂きます。 エクセルのアクティブになったセルの色を変えたいのですが 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 上記の表記で行単位の変更は出来たのですが、セル単位での変更方法が分かりません。 変更の条件として、 ・アクティブなセルの色のみを変える ・アクティブからノンアクティブになった場合、前回指定されていた色へ戻す。 といった風にする事は可能でしょうか? 可能であればぜひご教授お願いいたします。

みんなの回答

  • hige_082
  • ベストアンサー率50% (379/747)
回答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 以上 どんな処理をするかは、コードから読み取ってね

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

★(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

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答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

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答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

marukyu-
質問者

補足

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

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

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

marukyu-
質問者

補足

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

関連するQ&A