2016-09-23 2 views
0

ここをクリックしてください。複数のシートからすべてのN/Aを一度に削除したい

私は削除するベールですが、私は行全体を削除するには、以下のコードを使用していますが、それは時間がかかる1行ずつ削除します。 私はすべての#N/Aを選択し、1つの範囲内で削除する必要があります。

Sub RemoveNA() 
Dim ws As Worksheet 

For sh = 1 To Worksheets.Count 

Set ws = Worksheet (sh) 
ws.Activate 

LR= ws.Cells(Rows.count,"B").End(xlUp).Row 

If ws.Name <> "Temp" Then 

For i = LR To 2 Step -1 

If Cells(i, "B").Text="#N/A" Then 

Rows(i).EntireRows.Delete 

End If 

Next i 

Next sh 

End Sub 
+0

コードに2つの「If」と1つの「End If」がありますが、どのように機能しますか? – omegastripes

+0

また、 'Set ws = Worksheet(sh)'構文が間違っています。 'Set ws = Worksheets(sh)'でなければなりません。 – omegastripes

答えて

0

本当にVBAが必要ですか?細胞に他のエラーがありますか?

カラム/範囲を選択してctrl + G - >スペシャル - >フォーミュラエラーを選択するだけで、#N/Aエラーが発生した場合は、[すべて削除]を右クリックしてください。

あなたはまだあなたがかもしれませんが、複数のシートを通過するマクロを使用する場合は、コードを実行して行われたり、エラーにする場合Application.ScreenUpdating = Trueに戻って、それを設定する前に Application.ScreenUpdating = Falseを行います。実行時間が大幅に増加します。

1

VBAソリューションが必要な場合は、これを試してください。これは、ループ内の行を削除しません。

Sub RemoveNA() 
    Dim ws As Worksheet 
    Dim delRange As Range 
    Dim i As Long 

    For Each ws In ThisWorkbook.Worksheets 
     With ws 
      If .Name <> "Temp" Then 
       LR = .Cells(.Rows.Count, "B").End(xlUp).Row 
       For i = 2 To LR 
        If .Range("B" & i).Text = "#N/A" Then 
         If delRange Is Nothing Then 
          Set delRange = .Rows(i) 
         Else 
          Set delRange = Union(delRange, .Rows(i)) 
         End If 
        End If 
       Next i 
      End If 
     End With 

     If Not delRange Is Nothing Then 
      delRange.Delete 
      Set delRange = Nothing 
     End If 
    Next ws 
End Sub 
+0

ありがとうございました! Siddharth Rout ......完璧に働いています – Rajeshji

+1

@ShaiRado:あなたの投稿を編集したいなら、正しくしてください:)あなたはすべてのインデントを外しました。とにかく、私はそれを修正し、また少しそれを微調整:) –

関連する問題