Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7 Professional : Excel 2010)
セルの背景色の保存と復元方法
投稿日時: 17/12/16 17:06:34
投稿者: TI

クリックしたセルの行と列の一定範囲のセル背景に色を付ける
処理を行っております。
 
現在は、条件付き書式を使用して、以下のプログラムを使用して
反映をさせております。
 
条件付き書式
=CELL("row")=ROW()
 
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
     
    ActiveSheet.Calculate
     
     
End Sub
 
上記の処理を利用すると希望の動作ではあるものの、行のコピー、貼り付けと
いった作業ができなくなります。
(なぜ、そうなってしまうかはわかりませんが)
 
また、一定の範囲内のみでセル背景に色を付けるということをしたいのですが、
範囲外のセルをクリックした場合でも背景色がついてしまいます。
 
そこで、VBAを使用してセルの背景色をつけようかと思うのですが、
色付け前の元の背景色をどのように保存して、復元する方法がないものかと
考えております。
 
背景色を取得する方法などは調べて出てきたのですが、範囲を指定して保存、
復元する方法がわかりませんでした。
 
何か良い方法がありましたら、アドバイスお願いします。

回答
投稿日時: 17/12/16 17:44:04
投稿者: WinArrow
投稿者のウェブサイトに移動

TI さんの引用:

上記の処理を利用すると希望の動作ではあるものの、行のコピー、貼り付けと
いった作業ができなくなります。
(なぜ、そうなってしまうかはわかりませんが)

>行のコピー、貼り付けといった作業ができなくなります。
 
この症状が理解できません、
 
どのような状態になるんでしょう?
 
現在の仕様では、条件付き書式が設定してセルをクリックしたとき
背景色が変わります。
>範囲外のセルをクリックした場合でも背景色がついてしまいます。
は、条件付き書式が設定されているセル範囲の外ということですか?
 
条件付き書式は、どの範囲で設定してあるんですか?
 
若しかしたら、条件付き書式が設定してある、セル(範囲)をコピペしていませんか?
 
 
VBAで背景色を設定して、カーソルが他のセルに移動した後、元に戻す・・・
は、かなり厄介な処理になります。
 
 
 
 

回答
投稿日時: 17/12/16 18:00:21
投稿者: sy

TI さんの引用:
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    ActiveSheet.Calculate
End Sub
何か良い方法がありましたら、アドバイスお願いします。

こんばんわ。
 
Calculateだとシート全体が再計算されるので、コピーモードなどは解除されてしまいます。
Excelの仕様です。
 
こう言う場合は、再描画にすればコピーモードは解除されません。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Application.ScreenUpdating = True
End Sub

として下さい。

回答
投稿日時: 17/12/16 18:19:03
投稿者: sy

TI さんの引用:
また、一定の範囲内のみでセル背景に色を付けるということをしたいのですが、
範囲外のセルをクリックした場合でも背景色がついてしまいます。

此方に関しては、数式で処理するのは、ちょっとめんどくさいです。
一方マクロ内で処理すると以下のような簡単な記述で済みます。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Intersect(Target, Range("A1:H100")) Is Nothing Then Exit Sub
    Application.ScreenUpdating = True
End Sub

上記コードの、Range("A1:H100") の A1:H100 を一定の範囲と同じに合わせて下さい。

回答
投稿日時: 17/12/17 22:06:28
投稿者: baoo

E10:J30に条件付き書式が設定されているとして、
条件付き書式の式を下記のように変更し、
=AND(CELL("row")=ROW(),CELL("row")>=10,CELL("row")<=30,CELL("col")>=5,CELL("col")<=10)
Worksheet_SelectionChangeイベントでsyさんが提示された
Application.ScreenUpdatong=True
としたら如何でしょう。

投稿日時: 17/12/23 09:17:17
投稿者: TI

ご回答に気が付くのか遅くなりました。
 
ご提示の方法を試したところ、希望通りの動作が実現できました。
ありがとうございます。