こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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

エクセルについて質問させて頂きます。
エクセルのアクティブになったセルの色を変えたいのですが


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

上記の表記で行単位の変更は出来たのですが、セル単位での変更方法が分かりません。

変更の条件として、

・アクティブなセルの色のみを変える
・アクティブからノンアクティブになった場合、前回指定されていた色へ戻す。

といった風にする事は可能でしょうか?

可能であればぜひご教授お願いいたします。

投稿日時 - 2009-02-06 11:01:42

QNo.4693736

困ってます

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.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

以上
どんな処理をするかは、コードから読み取ってね

投稿日時 - 2009-02-07 08:27:30

ANo.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

投稿日時 - 2009-02-06 21:47:10

ANo.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

投稿日時 - 2009-02-06 16:59:58

ANo.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

投稿日時 - 2009-02-06 11:33:18

補足

お答えを頂きありがとうございます。
ほぼ思ったとおりのもの名のですが、2色以上の色を含むセルを範囲選択すると

m_IRO = Target.Interior.ColorIndex

の部分で

実行時エラー94
nullの使い方が不正です

とエラーが出てしまいます。
範囲指定をした時にエラーが出ないようにすることは可能でしょうか。

投稿日時 - 2009-02-06 15:57:24

ANo.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

投稿日時 - 2009-02-06 11:18:57

補足

お答えを頂きありがとうございます。
ほぼ思ったとおりのもの名のですが、2色以上の色を含むセルを範囲選択すると

m_IRO = Target.Interior.ColorIndex

の部分で

実行時エラー94
nullの使い方が不正です

とエラーが出てしまいます。
範囲指定をした時にエラーが出ないようにすることは可能でしょうか。

投稿日時 - 2009-02-06 15:45:23

あなたにオススメの質問