こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

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

投稿日時 - 2019-01-08 21:49:05

QNo.9575743

困ってます

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

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

投稿日時 - 2019-01-09 19:23:08

お礼

ありがとうございました。
動きみながらコマンド調べて少しずつ勉強してます。

とてもよくわかる解説、ありがとうございました。
また次回質問したら宜しくお願いします。

投稿日時 - 2019-01-09 22:28:00

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.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

投稿日時 - 2019-01-08 22:50:52

補足

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

投稿日時 - 2019-01-09 17:01:07

あなたにオススメの質問