2017-10-18 6 views
3

その行のセルがゼロ(または空)の場合、各行をチェックするコードがあります。行がそのルールに適用される場合、行は非表示になります。そうでなければ、それは目に見えるままです。コードは完璧に動作より速い行を非表示にするVBA

、しかし、それは非常に非常に遅いです(私はそれを実行するたびに完了するのに約40秒かかります)。..

誰もが私のコードが遅い理由を参照して(または持っていることができれば、私は思っていましたあなたは(それぞれの行を非表示にしたときに、私は

Sub hide() 
' Macro hides all rows with position "zero" or "blank" 

    Dim wb As Workbook 
    Dim ws As Worksheet 
    Dim c As Range 
    Dim targetRange As Range 

    Set wb = ThisWorkbook 
    Set ws = wb.Sheets("Sheet 1") 
    Set targetRange = ws.Range("I10:N800") 

    targetRange.EntireRow.Hidden = False 

    For Each c In targetRange.Rows 
     If (WorksheetFunction.CountIf(c, "<>0") - WorksheetFunction.CountIf(c, "") = 0) And (WorksheetFunction.CountA(c) - WorksheetFunction.Count(c) = 0) Then 
     c.EntireRow.Hidden = True 
     End If 
    Next c 


End Sub 
+1

コード:

は、以下のコードを試してみてください。投稿のアドバイスについてはこちらをご覧ください:https://codereview.meta.stackexchange.com/questions/2436/how-to-get-the-best-value-out-of-code-review-asking-questions – QHarr

+0

も読んでください[Stack Overflowユーザーのためのコードレビューガイド](https://codereview.meta.stackexchange.com/questions/5777/a-guide-to-code-review-for-stack-overflow-users) – danieltakeshi

答えて

6

あなたのコード内のアクションをconsuimngほとんどの時間は、あなたのケースでは、ワークシート上のアクションを実行するたびに..です私の現在のコード)よりも高速である使用できる代替複数回)、ここでは:

c.EntireRow.Hidden = True 

時間を節約するために、条件が満たされるたびに、範囲cMergeRngに追加し、最後に(ループを終了すると)行全体を一度に非表示にします。しかし、最適化は、コードレビューに投稿するための候補かもしれ必要働く

Dim MergeRng As Range ' define range object 

For Each c In targetRange.Rows 
    If (WorksheetFunction.CountIf(c, "<>0") - WorksheetFunction.CountIf(c, "") = 0) And (WorksheetFunction.CountA(c) - WorksheetFunction.Count(c) = 0) Then 
     If Not MergeRng Is Nothing Then 
      Set MergeRng = Application.Union(MergeRng, c) 
     Else 
      Set MergeRng = c 
     End If 
    End If 
Next c 

' hide the entire rows of the merged range at one time 
MergeRng.EntireRow.Hidden = True 
+0

ありがとう助けて!私はコードを試しましたが、 "MergeRngが何もしていない場合" - "Object required"と表示されます。 – ErikSlui

+0

@ErikSluiは編集されたコードを試して、 'Range'オブジェクトを定義する部分を追加するのを忘れました –

+0

Shai Radoさん、ありがとうございました!ずっと試してみましたが、魅力のように働いていましたが、今は数秒しかかかりません! :-) – ErikSlui

関連する問題