• ベストアンサー

この場合エクセルVBAでどう書けばいいでしょうか?

あるシートのH列で、H21からH46のあいだで"False"がある行を非表示にしたいのです。 下記の冗長なマクロでもそうなりますが、For Nextというのを使うともっと簡潔に記述できると思うのですが、初心者のためよくわかりません。ご教示ください。 また、下記の式はシートが保護されていると働きませんが、保護したシートでも動く方法があればそれもあわせて教えていただけると幸いです。 エクセルは95です。 Sub 空白行非表示() G% = Sheets("見積書").Range("H48").Value With Sheets("見積書") Rows("19:47").RowHeight = G% If Range("H21") = False Then Rows("21").EntireRow.Hidden = True End If If Range("H22") = False Then Rows("22").EntireRow.Hidden = True End If If Range("H23") = False Then Rows("23").EntireRow.Hidden = True End If If Range("H24") = False Then Rows("24").EntireRow.Hidden = True End If 途中、繰り返しのため省略 If Range("H42") = False Then Rows("42").EntireRow.Hidden = True End If If Range("H43") = False Then Rows("43").EntireRow.Hidden = True End If If Range("H44") = False Then Rows("44").EntireRow.Hidden = True End If If Range("H45") = False Then Rows("45").EntireRow.Hidden = True End If If Range("H46") = False Then Rows("46").EntireRow.Hidden = True End If End With End Sub

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

  • ベストアンサー
  • TTak
  • ベストアンサー率52% (206/389)
回答No.1

保護したシートでも動く方法ですが、保護をProtectメソッドで行い、UserInterfaceOnlyの値をTrueにします。 サンプルは次の通りです。 Sub SAMPLE_Macro()   ActiveSheet.Protect UserInterfaceOnly:=True   Rows("21:46").Hidden = False   For i = 21 To 46     If Cells(i, 8).Text = "False" Then       Rows(i).Hidden = True     End If   Next i End Sub

moooon
質問者

お礼

ありがとうございました。 うまくできました!

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

Sub test01() For i = 21 To 46 If Cells(i, "h") = "False" Then Cells(i, "h").EntireRow.Hidden = True ' MsgBox i End If Next i End Sub Falseを""で囲まないとうまく行かないようです。 Cells(i, "h").EntireRow.Hidden = True のところはRows(i).Hidden = Trueでも可。 テスト済み。

moooon
質問者

お礼

ありがとうございました。 うまくできました!