あなたはこれを使用することができます。
Option Explicit
Sub main()
Dim falseRange As Range
Dim grp As Range
With Range("A1", Cells(Rows.count, 1).End(xlUp).Offset(1))
.AutoFilter field:=1, Criteria1:=CStr(False), Operator:=xlAnd, Criteria2:="<>"
If Application.WorksheetFunction.Subtotal(103, .Cells) > 1 Then
Set falseRange = .Resize(.Rows.count - 1).Offset(1).SpecialCells(xlCellTypeVisible)
End If
.Parent.AutoFilterMode = False
End With
For Each grp In falseRange.Areas '<--| group contiguous cells toghether
grp.Rows.Group
Next
End Sub
のリファクタリングが考えられます。
Sub main()
Dim falseRange As Range
Dim grp As Range
Set falseRange = GetFalseRange(Range("A1", Cells(Rows.count, 1).End(xlUp).Offset(1)))
If Not falseRange Is Nothing Then
For Each grp In falseRange.Areas '<--| group contiguous cells toghether
grp.Rows.Group
Next
End If
End Sub
Function GetFalseRange(rng As Range) As Range
With rng
.AutoFilter field:=1, Criteria1:=CStr(False), Operator:=xlAnd, Criteria2:="<>"
If Application.WorksheetFunction.Subtotal(103, .Cells) > 1 Then Set GetFalseRange = .Resize(.Rows.count - 1).Offset(1).SpecialCells(xlCellTypeVisible)
.Parent.AutoFilterMode = False
End With
End Function
パーフェクト!どうもありがとうございます。 – MaineBlackBears
ようこそ。私のコードを少しリファクタリングして、それをもっと "使える"ようにしてください。 – user3598756
リファクタリングは私にとって意味があります。ありがとうございました。 – MaineBlackBears