列 A に値「xx」を含むすべての行を非表示にし、列 A に値「a」を含む行は非表示にしないようにします。範囲は A8:A556 です。このマクロは、セル C4 の変更によってトリガーされる必要があります。
なぜ機能しないのか、何か考えはありますか? 現在の試みは次のとおりです:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(True, True) = "$C$4" Then
If Range("A8:A555").Value = "xx" Then
Rows("8:555").EntireRow.Hidden = True
ElseIf Range("A8:A555").Value = "a" Then
Rows("8:555").EntireRow.Hidden = False
End If
End If
End Sub
ありがとう!
編集:
Fixer1234さん、詳細は次のとおりです。
- マクロが正しく動作する場合、「xx」と「a」は一緒に存在しない可能性があります。
- 非表示にする必要があるのは「xx」行のみです
- 「xx」値は、非表示にできない値と組み合わせられていません。
- 「a」値は、非表示にする必要がある値と組み合わせられません。
- 「xx」または「a」を含まない他の行は非表示にする必要はありません (これらの列に「a」を追加するか、IfElse を完全に削除する必要がありますか?)。
- 「xx」行には他の数式が含まれており、数式の結果が空白の場合は行を非表示にする必要があることを意味します。
- 「a」行は同じ式を持ちますが、結果を生成するため、非表示にすることはできません。
実行時エラー '13': 型の不一致が発生し、デバッグは最初の
If Range("A8:A555").Value = "xx" Then
答え1
を使用して範囲内のすべての値をテストすることはできませんRange("A8:A555").Value = "xx"
。型の不一致エラーが発生します。
範囲内の各セルをループし、それがValue
「xx」に等しいかどうかを個別にテストする必要があります。
コードの実行速度を上げるには、行が検出されるたびに非表示にするのではなく、非表示にする行をまとめてRange
からRanges
、一度にすべてを非表示にします。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim cel As Range
Dim RangeToHide As Range
'Test if Target is C4
If Not Intersect(Target, [C4]) Is Nothing Then
'Loop through each cell in range and test if it's "xx"
For Each cel In Range("A8:A555")
If cel = "xx" Then
If RangeToHide Is Nothing Then
'Initialise RangeToHide because Union requires at least 2 ranges
Set RangeToHide = cel
Else
'Add cel to RangeToHide
Set RangeToHide = Union(RangeToHide, cel)
End If
End If
Next
RangeToHide.EntireRow.Hidden = True
End If
End Sub
答え2
この VBA コードを標準モジュールとして使用すると、列にまたはXX
のいずれかがあるすべての行を非表示にするのに役立ちます。xx
A
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(True, True) = "$C$4" Then
Dim i As Integer
Application.ScreenUpdating = False
For i = 8 To 255
If Sheets("Sheet1").Range("A" & i).Value = "XX" Or Sheets("Sheet1").Range("A" & i).Value = "xx" Then
Rows(i & ":" & i).EntireRow.Hidden = True
End If
Next i
End If
Application.ScreenUpdating = True
End Sub
注意
a
またはを持つ行は既に表示されているため、それらの行を再表示するためのコードを使用する必要はありませんA
。そして何よりも、使用されるコードは列 内の特定の行を非表示にしますA
。
答え3
別々の行を非表示にするにはどうすればいいでしょうか?
私の考えはこうです:
Private Sub CheckBox1_Click()
If CheckBox1 = False Then
[15:15].EntireRow.Hidden = True
[3:3].EntireRow.Hidden = True
Else
[15:15].EntireRow.Hidden = False
[3:3].EntireRow.Hidden = False
End If
よろしくお願いいたします
マティアス