[[20200812142744]] 『オートフィルタで検索中セルがわかりにくい』(FALCON) ページの最後に飛ぶ

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

 

『オートフィルタで検索中セルがわかりにくい』(FALCON)

よろしくお願いします
オートフィルタで検索中セルの表示が小さくわかり
にくいので、こちらの学校で検索をして下記のコードが
紹介されてましたので使わせて頂いております
今、フィルタ抽出しているセルが赤くなり、わかりやすい
のですが、その行全体に色がついている場合があります
フィルタ抽出を解除したあと白くなるのでですが
元の色に戻すことは可能でしょうか
可能であれば方法を教えて頂けなしでしょうか

Private Sub Worksheet_Calculate()

     Static MyRng As Range
     Dim i As Long
     If Me.AutoFilterMode Then
         With Me.AutoFilter
             Set MyRng = .Range
             For i = 1 To .Filters.Count
                 If .Filters(i).On Then
                     MyRng.Cells(i).Interior.ColorIndex = 3 ’3=赤
                 Else
                     MyRng.Cells(i).Interior.ColorIndex = xlNone
                 End If
             Next i
         End With
     Else
         If Not MyRng Is Nothing Then
             For i = 1 To MyRng.Columns.Count
                 MyRng.Cells(i).Interior.ColorIndex = xlNone
             Next i
         End If
     End If
 End Sub

< 使用 Excel:Excel2010、使用 OS:Windows2000 >


マクロ動作に対してはUndoは利きませんから、
簡単操作で元に戻すことはできません。

そもそも、範囲の一部に色がついていて、それを残したいのであれば、
フィルタされた箇所を赤くするということ自体が悪手ではないですか?
抽出されたことで既に目立っているわけですよね。

どうしても、ということなら、
・マクロの最初で別領域にコピー(退避)しておき、
・マクロの最後で復旧することになるでしょう。

なお、経緯が不明ですが、Calculateのつど動作する点は
副作用がないんですか?
関係ないところの変更でも動作するわけで、
static領域がいったん定義されれば、
その動作の都度、その領域は色を消されることになっていますよね。

全体に仕様を再検討された方がよさそうな印象です。
(γ) 2020/08/12(水) 14:52


「セルの表示が小さくわかりにくい」ことへの対応策が、
「セルを背景色を赤くする」ことというのもよくわからないです。
ズームで拡大表示するのが対応策では?

(γ) 2020/08/12(水) 15:15


今のコードはすっぱり止めて、条件付き書式で、特定セルの文字列を含むセルは着色するようにしてはどうでしょうか。 条件付き書式なら、条件を外れると元の色に戻ります。

オートフィルタと違って行の絞り込みはしませんが、併用して、絞り込むのはオートフィルタで、着色するのは条件付き書式と分担すれば良いでしょう。 検索文字列を2度入力するのは手間なので、条件付き書式用文字列を入力すると、マクロでオートフィルタがかかるようにするとか。
(???) 2020/08/12(水) 16:46


何をしたいのかがわかりません。

「その行全体に色がついている場合があります」というのは、
どういう意味でしょう?

「フィルターをかけた時に、対応するタイトル行のセルのみではなく、
フィルター条件を設定した列全体に色がつく場合があるし、つかない場合もある」
ということですか?
(コードを見る限り、列全体や行全体に色がつくように見えないのですが……)

やりたいことはなんでしょう? 
「白くなる」ににもかかわらず、
「元に戻したい」ということは、
ここでいう「元の状態」とは「対応するタイトルセルが赤くなっている状態」のことであり、
「フィルターされている状態で赤くなっていたセルを、
フィルター解除後も赤いままにしたい」ということでしょうか?

もしそうなら、「Else〜」から、一つめの「End If」を消せば、
一応マクロの想定している「無色に戻す操作」はキャンセルできそうですが……。
(愛飢え男) 2020/08/12(水) 17:38


素直にご要望通り対応
[[20160729130714]] のβさんのアイデアです。

 Private Sub Worksheet_Calculate()
    Static MyRng As Range
    Dim i As Long
    If Me.AutoFilterMode Then
        With Me.AutoFilter
            Set MyRng = .Range
            MyRng.Rows(1).Cells.FormatConditions.Delete
            For i = 1 To .Filters.Count
                If .Filters(i).On Then
                    MyRng.Cells(i).FormatConditions.Add Type:=xlExpression, Formula1:="=TRUE"
                    MyRng.Cells(i).FormatConditions(1).Interior.ColorIndex = 3
                Else
                    MyRng.Cells(i).FormatConditions.Add Type:=xlExpression, Formula1:="=TRUE"
                    MyRng.Cells(i).FormatConditions(1).Interior.ColorIndex = xlNone
                End If
            Next
        End With
    Else
        If Not MyRng Is Nothing Then _
        MyRng.Rows(1).Cells.FormatConditions.Delete
    End If
 End Sub

(kazuo) 2020/08/12(水) 19:43 訂正19:59


Private Sub Worksheet_Calculate()
     Static MyRng As Range
     Static dt()
     Dim i As Long
     If Me.AutoFilterMode Then
         With Me.AutoFilter
             Set MyRng = .Range
             ReDim dt(.Filters.Count)
             For i = 1 To .Filters.Count
                 dt(i) = MyRng.Cells(i).Interior.ColorIndex
                 If .Filters(i).On Then
                     MyRng.Cells(i).Interior.ColorIndex = 3  '3=赤
                 Else
                     MyRng.Cells(i).Interior.ColorIndex = xlNone
                 End If
             Next i
         End With
     Else
         If Not MyRng Is Nothing Then
             For i = 1 To MyRng.Columns.Count
                MyRng.Cells(i).Interior.ColorIndex = dt(i)
             Next i
         End If
     End If
 End Sub
(mm) 2020/08/13(木) 09:56

皆様有難うございます
マクロの構文についてはあまりわかっていないのが現状で
Private Sub Worksheet_Calculate() の意味もわからず
マクロを参照させて頂いて使わせて頂いております
やりたいことがわかなない、というご意見がありましたので
現在のシート上のイメージです
	A	B	 C    D   E・・・
1      エリア 都道府県 担当者             任意のセルに=NOW()が入っています
2	名古屋	愛知県 白井    
3	大阪	大阪府	河野
4	松阪	三重県	白井
5	神戸	兵庫県	森口
6	鳥羽	三重県	白井
: :

1行目はタイトル行ということで書式設定で黄色の色が設定してあります

最初に掲載させて頂いたマクロでは
例えばA1セルにてエリアを選択した場合、A1セルが赤くなり、A列がフィルタ選択されて
いることがわかります
その際、B1、C1セルの黄色は消えます
フィルタをすべてを選択にするとA1セルの赤がなくなります

この時にA1、B1,C1セルを元の黄色にできないか のご相談でした

kazuoさんのマクロを確認させて頂きました

フィルタをすべてを選択にするとA1セルの赤がなくなります
A1、B1,C1セルは白いままでした
A1、B1、C1セルに条件付き書式の設定がありましたので
それを解除するとA1、B1,C1セルは黄色になりました

mmさんのマクロを認させて頂きました
フィルタをすべてを選択にするとA1セルの赤がなくなります
A1、B1,C1セルは白いままでした
こちらはA1、B1、C1セルに条件付き書式の設定は残っていませんでした

EXCELはEXCEL2016でした
WINDOWS10でした
訂正させて頂きます
すみませんでした

(FALCON) 2020/08/13(木) 13:46


フィルターonの判断追加しました。
なお、書式を直接変えてしまうとフィルターのかかったまま対処せずに保存すると、書式も保存されてしまいます。

 Private Sub Worksheet_Calculate()
    Static MyRng As Range
    Dim i As Long
    If Me.AutoFilterMode Then
        With Me.AutoFilter
            Set MyRng = .Range.Rows(1)
            MyRng.Cells.FormatConditions.Delete
            For i = 1 To .Filters.Count
                If .Filters(i).On Then Exit For
            Next
            If .Filters.Count < i Then Exit Sub
            For i = 1 To .Filters.Count
                If .Filters(i).On Then
                    MyRng.Cells(i).FormatConditions.Add Type:=xlExpression, Formula1:="=TRUE"
                    MyRng.Cells(i).FormatConditions(1).Interior.ColorIndex = 3
                Else
                    MyRng.Cells(i).FormatConditions.Add Type:=xlExpression, Formula1:="=TRUE"
                    MyRng.Cells(i).FormatConditions(1).Interior.ColorIndex = xlNone
                End If
            Next
        End With
    Else
        If Not MyRng Is Nothing Then _
        MyRng.Cells.FormatConditions.Delete
    End If
 End Sub

(kazuo) 2020/08/13(木) 18:59


黄色と決まっているなら

 Private Sub Worksheet_Calculate()
     Static MyRng As Range
     Dim i As Long

     If Me.AutoFilterMode Then
         With Me.AutoFilter
             Set MyRng = .Range
             MyRng.Rows(1).Interior.Color = vbYellow

             For i = 1 To .Filters.Count
                 If .Filters(i).On Then
                     MyRng.Cells(i).Interior.Color = vbRed
                 End If
             Next i
         End With
     ElseIf Not MyRng Is Nothing Then
         MyRng.Rows(1).Interior.Color = vbYellow
     End If

 End Sub

(マナ) 2020/08/13(木) 19:03


コメント返信:

[ 一覧(最新更新順) ]


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