映画のエンドロール観る派?観ない派?

Excel VBAでご教示ください。
オートフィルタの条件が2つあります。
1.セルG1に入っている基準日より、以前のもの(基準日は含めない)
2.ステータスが「完了」以外のもの
つまり、基準日がきているのに書類が完了していないものを抽出したい。
そして、抽出されたものにだけ黄色い色にしたい。

以下のVBAを作りましたが、該当する値がないとき(0件の時)全部に色が塗られてしまいました。
該当があるときはセルを塗る、該当なし0件の時には色は塗らない。
このようにするには、IF文などを使うしか方法がないのでしょうか。

Sub TEST9_2()

Dim kijyun As Long
kijyun = Range("E1").Value

Range("B2:E7").AutoFilter Field:=4, Criteria1:="<" & Cells(1, 7)
Range("B2:E7").AutoFilter Field:=3, Criteria1:="<>完了"

Range("B3:E7").Interior.ColorIndex = 6

End Sub

「Excel VBAでフィルタしたものに色」の質問画像

A 回答 (3件)

IF文を使うのが一般的ですし可読性も高いと思います。



SUBTOTAL関数を使えばフィルター後に表示されているものについてのみ演算することができますので、その結果により色を塗るか塗らないかの指示をすればよいと思います。
通常、データ個数をだすのはCOUNTAですが、フィルター後のデータ個数をだすのがSUBTOTAL(3,範囲)になります。

例えば、H1セルに『=SUBTOTAL(3,B:B)』と入力しておけば、該当なしのときは見出し行のみが残るのでデータ個数は1になります。H1セルが1のときのみ色を塗らないようにすれば解決です。もちろん、これと同等のことをvbaで記述してもよいです。
    • good
    • 0

>このようにするには、IF文などを使うしか方法がないのでしょうか。



IF文に限りませんが、条件を判定して、その条件によって異なる処理をさせたいのであれば、条件によって処理を分岐する命令を使うというだけのことです。
    • good
    • 0

こんばんは



>IF文などを使うしか方法がないのでしょうか。
普通に処理するならそうでしょうね。
E列に必ず日付があるのなら、CountAで表示行を数えれば、表示行数を求められます。

他の方法としては、範囲に必ず表示されている行を含めておく(タイトル行、あるいは8行目とか)という方法も考えられます。
色付けしたら、その行(タイトル行など)の色は消すといった要領です。

あるいはループで1行ずつHidden属性を見て、色を付けるとか。
(最初のIF文で行うのと、あまり変わりませんけれど・・)
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A