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

解決済みの質問

この場合エクセル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

投稿日時 - 2003-01-15 13:20:52

QNo.445912

困ってます

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

保護したシートでも動く方法ですが、保護を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

投稿日時 - 2003-01-15 13:41:24

お礼

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

投稿日時 - 2003-01-16 16:16:11

ANo.1

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

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

-広告-
-広告-

回答(2)

ANo.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でも可。
テスト済み。

投稿日時 - 2003-01-15 16:18:19

お礼

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

投稿日時 - 2003-01-16 16:16:59

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-