- ベストアンサー
この場合エクセル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
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
保護したシートでも動く方法ですが、保護を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
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
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でも可。 テスト済み。
お礼
ありがとうございました。 うまくできました!
お礼
ありがとうございました。 うまくできました!