2011-12-22 4 views
1

私は、下にある2つのコードを持っています。もう1つは、そこに含まれる値の合計に基づいて行が表示され、ゼロに等しくなります。しかし、このコードはセクション間のスペーサーなので、私が望ましくない空白行も隠します。アドバイスをいただければ幸いです。また、既存のコードを改善するための推奨事項がある場合は、それも高く評価されます。コンテンツの合計= 0で空白をスキップすると、Excelの行を非表示にするにはどうすればよいですか?

Sub HideRows() 

Dim R As Long 
Dim Rng As Range 

    If Selection.Rows.Count > 1 Then 
     Set Rng = Selection 
    Else 
     Set Rng = ActiveSheet.UsedRange 
    End If 

    For R = 1 To Rng.Rows.Count 
     If Application.Sum(Range(Rng(R, 3), Rng(R, Rng.Columns.Count))) = 0# Then 
     Rng.Rows(R).Hidden = True 
     End If 
    Next R 

End Sub 
Sub UnHideRows() 

Dim R As Long 
Dim Rng As Range 

    If Selection.Rows.Count > 1 Then 
     Set Rng = Selection 
    Else 
     Set Rng = ActiveSheet.UsedRange 
    End If 

    For R = 1 To Rng.Rows.Count 
     If Application.Sum(Range(Rng(R, 3), Rng(R, Rng.Columns.Count))) = 0# Then 
     Rng.Rows(R).Hidden = False 
     End If 
    Next R 

End Sub 
+1

コードの速度が問題である場合は、行を非表示にするためにオートフィルタ(手動またはVBA)よりもTrueまたはFalseを返す「作業列」を使用する方が速くなります。 – brettdj

答えて

4

この各方法におけるFORループ置き換える....その行範囲内のすべてのセルが空白であり、真の場合は、本質的に、さらなる処理をスキップするかどうかを確認するために

myRange = Range(Rng(R, 3), Rng(R, Rng.Columns.Count)) 
For R = 1 To Rng.Rows.Count 
    If Application.CountBlank(myRange) <> myRange.Cells.Count Then 
    If Application.Sum(myRange) = 0# Then 
     Rng.Rows(R).Hidden = True 
    End If 
Next R 

これは、最初に確認します。

+0

それはトリックでした。ありがとう! – ThaddeusTG

関連する問題