[[20110828004112]] 『セルに色をつけたい』(KAZUKAZU) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『セルに色をつけたい』(KAZUKAZU)
 お願いします。現セルに色をつけ、移動したら移動先のアクテブセルに
 色をつけ、直近のセルは、以前に戻すことをしたいのですが
 事例を試してもわかりません。よろしく、お願い致します。
 データーが行9000ありますので フイルターでヒットとしたセルの位置が
 不明になる。それを画面中央に出す。
@  ActiveCell.Activate
    ActiveCell.Interior.ColorIndex = 3
 この方法だと、元の色が元にもどらない。

A Private Sub Worksheet_SelectionChange(ByVal Target As Range)

   For Each c In UsedRange
      If c.Interior.ColorIndex = 4 Then
         c.Interior.ColorIndex = xlColorIndexNone
      End If
   Next
   Target.Cells.Interior.ColorIndex = 4
   End Sub
  この方法ですと、エンター毎に変化するのと、時間がかかるので(データー多いので)
  通常マクロで実行したく、Aの一行を削除し普通マクロで実行とエラーになる。

・シート名にコピーのマクロでなく、どうしても普通マクロで実行したい。
 実行したいのは、ActiveCell.Activate後のセルに色をつけたいのです。
 何度も繰り返すすので、位置が分からなくなる。
どうか教えて下さい お願い致します


 なんどかこの板で紹介してるけど、なぜか見向きもされない、アンドリューさんの条件付き書式を使うスゴ技。
 「元に戻すとき」元に色がついていたら、その色に戻るところも「ミソ」だね。
 何よりも、コードとしては「1行」というのがすごい。

 http://blog.livedoor.jp/andrewj/archives/18035971.html

 ・↑の例は、「選ばれた行に色づけ」なので、選ばれた「セル」なら、条件式を =AND(CELL("row")=ROW(),CELL("col")=COLUMN())
 ・またThisworkbookモジュールで全シートをカバーしているけど、特定のシートのみでよければ、そのシートモジュールのWorksheet_SelectionChangeのほうが軽くなる。
 ・条件付き書式は、シートのセルをすべて選択した状態で設定してもいいけど、そのようにしたいセル領域のみを選んで設定したほうが軽くなる。

 (ぶらっと)

 >アンドリューさんの条件付き書式を使うスゴ技。
 実際に使ってみると
  ・条件付き書式を設定している範囲外からペーストすると設定した書式が無くなる
  ・新しく同様の物を作ろうと思った時 条件付き書式とコードの二つを移植する必要がある
  ・範囲に変更が有った場合、条件付き書式の再設定が必要
  ・この様に成っているセルをコピーすると、条件付き書式までコピーされてしまう
 なんて、ちょっと面倒でした。

 上の3つは、コードの方で 該当セル範囲に trueの条件付き書式を設定
 と言う仕組みに変えて使ってみた事もありますが
 コピーで、条件付き書式が付いてきてしまうのは避けられず。。。
 発動していないと、設定が有るのか無いのかも分からないですしね。
 設定しているのを忘れてそのまま貼り付けて、ある日突然別のシートで発見してしまう事が何度かありました。

 シートの状況が見えませんが
    Cells.Interior.ColorIndex = xlNone
    ActiveCell.Activate
    ActiveCell.Interior.ColorIndex = 3
 こんなので良いんじゃないでしょうか?

 何のフィルタか分からないですが、私は
 見つけた行のどこかのセルをアクティブにして →← とかします。
   絞り込み後、セルを選択して、フィルタを解除してマクロを実行するのではなく
   絞り込み後、セルを選択して、フィルタを解除してアクティブセルを矢印キーで動かす。
 すると、選んだセルが画面で見える位置に移動してきます。
   一つ移動したのと逆の方向へもう一つ移動させておけば、
   アクティブセルの位置も変わらずに済みます。

 (HANA)

ありがとうございました。
 私の質問も悪かったと思いますが、毎回その場所を知るというよりも、行5000列CAの多数のデーターを
 ファイター抽出・画面表示した時、アクテブセルの場所を発見したいのです
 そのために私なりに、
 ActiveCell.Activate
  ActiveCell.Interior.ColorIndex = 3を試しヤッタと思いましたら、
 次セル移動したときに直前色が元にもとりませんでした。
 ご教示の条件付きは試しましたが 重かった
 また
  Cells.Interior.ColorIndex = xlNone
    ActiveCell.Activate
    ActiveCell.Interior.ColorIndex = 3は既存設定してます、項目等の色まで
 リセットされました。
  カーソル位置を必要に時のみ知りたい そのマクロを作りたいのですが・・・・

 また事前質問のマクロ A Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 で、シートから外し、普通マクロにするにはどうしたらいいのですか

 すみません 質問がヘタで・・・・
 よろしく、お願い致します。

 


 >既存設定してます、項目等の色までリセットされました。
 でしたら、そのコードで 指定した場所以外のセルの色がリセットされれば良いのでしょうか?

 ちなみに、「普通マクロ」と言うのは ボタン等で実行指令をかけて
 実行するマクロの事ですか?

 セルの選択を変えた時に、勝手に実行されるマクロの事ではなく ですよね?

 >シートから外し、普通マクロにするには
 このコードは
 Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
 で始まっていますが、()の中に Target As Range ってのが有ります。
 Targetの中には、選択したセルがセットされています。
 なので、
 Target.Cells.Interior.ColorIndex = 4
 この時に、選択したセルの背景色が変わります。

 一行目を削除してしまっては、Targetに何もセットされていないので
 下の行で、「何処のセルの色よ!!」と怒られます。

 単純に、アクティブセルの色 としてみてはどうでしょう?
 ActiveCell.Interior.ColorIndex = 4

 (HANA)

 それでは普通のマクロを。これだと軽いね。
なお、色は、特に色なしだったセルの色を戻すとき、セルの薄い枠線がきえないColorIndexを使うのがすきだけど、
一方で、2007以降は、必ずしも、セルから取得した塗りつぶしの色のColorIndexと実際の色が同じではないケースがあるのでここでは、Colorを。
色がつけられたアクティブセルを削除しても、エラーにはならないようにしてある。

 Dim myAct As Range
 Dim myColor As Long

 Sub 普通のマクロ()
    If Not myAct Is Nothing Then
        On Error Resume Next
        myAct.Interior.Color = myColor
        On Error GoTo 0
    End If
    Set myAct = ActiveCell
    myColor = myAct.Interior.Color
    myAct.Interior.Color = vbYellow    'ここは好きな色を
 End Sub

 (ぶらっと)

私のために有難うございます
結果、どちらも貴重なご指導ありがとうございます。
普通マクロとは、ボタンマクロです。
結論からするとどちらも現セルに着色はしますが、移動するとその色が残ります。
 これを直前に戻したい。
 これを可能にしているのがわたくし最初の記述Aなのですが
 重いので、必要時実行できるボタンマクロにしたいのですが・・・・
すみません 再度よろしく、お願い致します。


 んん??

 >結論からするとどちらも現セルに着色はしますが、移動するとその色が残ります。

 提示コードは、「ボタンを押したときに」アクティブセルを認識。
 それ以前に色がついているセルがあれば、それを「元の色に」戻した上で、新しいアクティブセルに色づけ。

 要望は、アクティブセルが移動した、その瞬間に前の色を消したいということ?
 で、アクティブセルに色づけするのは、あくまでボタンを押したときだけ?

 それなら

 (標準モジュール)
 Public myAct As Range
 Public myColor As Long

 Sub 普通のマクロ()
    If Not myAct Is Nothing Then
        On Error Resume Next
        myAct.Interior.Color = myColor
        On Error GoTo 0
    End If
    Set myAct = ActiveCell
    myColor = myAct.Interior.Color
    myAct.Interior.Color = vbYellow    'ここは好きな色を
 End Sub

 (シートモジュール)

 Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not myAct Is Nothing Then
        On Error Resume Next
        myAct.Interior.Color = myColor
        On Error GoTo 0
        Set myAct = Nothing
    End If
 End Sub

  (ぶらっと)

有難うございます
笑って教えて下さい
はい
@マクロ実行時のみ着色です
Aマクロなしで移動したセルはなにもしない しかし@の色は消える 

私はいつもみなさんのマクロを貼り付けて使用してました
そのため↑のSUB 普通のマクロからコピーしてましたがエラーがでます
(標準モジュール)はどうコピーするのですか
ボタンマクロにはどこから〜どこまでコピーしたらいいのでしょうか
すみません


 エラーとは、いつの時点で、どんなエラーになるんだろうか?

 それはそれとして、 エクセルの画面で Alt/F11 をおすとVBE画面というものにきりかわる。
 標準モジュールは、ここで、メニューの挿入->標準モジュール を選んで出てくるシート。ここに

 Public myAct As Range
 Public myColor As Long

 Sub 普通のマクロ()
    If Not myAct Is Nothing Then
        On Error Resume Next
        myAct.Interior.Color = myColor
        On Error GoTo 0
    End If
    Set myAct = ActiveCell
    myColor = myAct.Interior.Color
    myAct.Interior.Color = vbYellow    'ここは好きな色を
 End Sub

 これだけを貼り付け。

 シートモジュールは、エクセル画面のシートのシートタブを右クリックしてコードの表示を選ぶとでてくるところ。ここに

 Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not myAct Is Nothing Then
        On Error Resume Next
        myAct.Interior.Color = myColor
        On Error GoTo 0
        Set myAct = Nothing
    End If
 End Sub

 これだけを貼り付け。

 で、シート上のボタンに、「普通のマクロ」をマクロ登録する。

 (ぶらっと)


本当に、素人にありがとうございました
この二つでひとつのセットなのですネ ようやく理解しました。
カラーの変更は番号でできるようにお願いできませんか
また後ひとつお願いですが
この普通のマクロを使かわさせていただきますが
ボタン実行した時に、画面中央に表示しできますように
ActiveCell.Activateと連動させたいと考えこのマクロへの記述場所が
わかりません。適当に配置したらエラーになるのです
どこに記述したらよいのでしょうか
よろしく、お願い致します。

    


 >カラーの変更は番号でできるよう

 上でレスしたようにColorIndexの場合、2007以降では、不都合がおこるケースがでてくるけど、それは承知の上ということなら。
 3カ所ある、myAct.Interior.Color を myAct.Interior.ColorIndex に。
 vbYellow(1カ所)を、たとえば 6 に。

 >ボタン実行した時に、画面中央に表示

 この意味は、そのときのアクティブセルが画面中央にということ?

 (ぶらっと)


完成しました
有難うございます
素人にここまでご教示有難うございます
勉強になりました。
質問意味は画面中央に表示です
それもOKでした
本当に感謝します。


 解決ということで祝着・・・だけども 【画面中央に表示ですそれもOKでした】
アップしたコードでは、アクティブセルを画面中央時もっていくことはしていないんだけど?
もし、そうするなら 【普通のマクロ】の最後、End Sub の前に、以下を追加。

 11:20 コードアップしたけど、いったん取り下げ。
 11:26 コード再掲。(ちょっと乱暴というか手抜きだけど)

    With ActiveWindow
        On Error Resume Next
        .ScrollColumn = ActiveCell.Column - Int(.VisibleRange.Columns.Count / 2)
        .ScrollRow = ActiveCell.Row - Int(.VisibleRange.Rows.Count / 2)
        On Error GoTo 0
    End With

 (ぶらっと)

最終確認がおくれてました。
ごめんなさい
決着しましたのでそのままにしてました
最終ご指導マクロも試させていただきます。
これまで有難うございました。

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.