• ベストアンサー

色のついていない行を非表示にしたい

ワークシートAにコマンドボタンをレイアウトして、ワークシートBの色のついているセルがない行を非表示にしたいのですがうまくいきません。 添付画像であれば、2,6,7の行を非表示にしたいのですがどのようにすればよいか、VBAを教えてください。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.2

With Worksheets("B")  Set myRang = .Cells.SpecialCells(xlCellTypeConstants) これはSpecialCells メソッドを使ってシートBの定数が含まれているセル範囲を 変数myRangに格納しています。 myRang.Select で確認できるでしょう >ワークシートの範囲は関係ないですか? 範囲が大きすぎたりすると取得できずにエラーが出ることが有るようです。  取得したmyRow範囲を行単位にループします。  For Each myRow In myRang.Rows   さらにmyRow行の中をセル単位でループします。   For Each c In myRow    セルが白色、もしくは無色以外であればフラグに印(True)をつけ    If c.Interior.Color <> vbWhite Then flg = True   Next    フラグがFalseならば色つきのセルが無かった事なのでその行は非表示   If flg = flase Then myRow.EntireRow.Hidden = True   次の行をチェックの為、フラグをFalseに   flg = False  Next End With

makisaori
質問者

お礼

ありがとうございました。 動きみながらコマンド調べて少しずつ勉強してます。 とてもよくわかる解説、ありがとうございました。 また次回質問したら宜しくお願いします。

その他の回答 (1)

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

参考に Sub Test() Dim myRow As Range, c As Range, flg As Boolean With Worksheets("B") Set myRang = .Cells.SpecialCells(xlCellTypeConstants) For Each myRow In myRang.Rows For Each c In myRow If c.Interior.Color <> vbWhite Then flg = True Next If flg = flase Then myRow.EntireRow.Hidden = True flg = False Next End With End Sub

makisaori
質問者

補足

ありがとうございました。うまくいきました。 ワークシートの範囲は関係ないですか? 命令文の横にコメントで動作の解説を入れて貰えるとすごく勉強になります。 お願いできますでしょうか?

関連するQ&A

専門家に質問してみよう