1

N/A列全体でセルを見つけ、見つかった場合は行全体を削除する方法を探していN/Aます。この VBA コードを見つけましたが、1 つの列しか選択しないため、うまくいきません。助けてください(Excel Mac 2011で約300000行に取り組んでいます)

Sub DeleteBlankARows() 
    With Application 
        .Calculation = xlCalculationManual 
        .ScreenUpdating = False 
        Dim r As Long 
        For r = Cells(Rows.Count, 11).End(xlUp).Row To 1 Step -1 
            If Cells(r, 11) = "" Then Rows(r).Delete 
        Next r 
        .Calculation = xlCalculationAutomatic 
        .ScreenUpdating = True 
    End With 
End Sub 
4

2 に答える 2

2

別の方法はFind、セルが何であるかをすばやくテストするために使用することNA()です(数式セルとしてテストしていると仮定しまし=NA()た-それらがテキストである場合は更新できます)

このコードはSpecialCells、エラー値のみを検索するために使用します。

Sub GetNA()
Dim rng1 As Range
Dim rng2 As Range
Dim rng3 As Range
Dim strFA As String

On Error Resume Next
Set rng1 = ActiveSheet.UsedRange.SpecialCells(xlFormulas, xlErrors)
On Error GoTo 0

If rng1 Is Nothing Then
    MsgBox "No NA() cells"
    Exit Sub
End If

With rng1
    Set rng2 = .Find("=NA()", LookIn:=xlFormulas)
    If Not rng2 Is Nothing Then
        strFA = rng2.Address
        Set rng3 = rng2.EntireRow
        Do
            Set rng2 = .FindNext(rng2)
            Set rng3 = Union(rng3, rng2.EntireRow)
        Loop While Not rng2 Is Nothing And rng2.Address <> strFA
    End If
    If Not rng3 Is Nothing Then rng3.Delete
End With

End Sub
于 2012-05-16T07:19:26.327 に答える
1

これを試してください (Windows XP / Excel 2007 でテスト済みですが、Mac / Office 2011 でも動作するはずです):

Option Explicit

Sub DeleteNARows()
    Dim r As Long
    Dim iCol As Long
    With Application
        .Calculation = xlCalculationManual
        .ScreenUpdating = False
        .DisplayAlerts = False
        For iCol = 1 To Cells(1, Columns.Count).End(xlToLeft).Column
            For r = Cells(Rows.Count, iCol).End(xlUp).Row To 1 Step -1
                If Application.WorksheetFunction.IsNA(Cells(r, iCol)) Then Rows(r).Delete
            Next r
        Next iCol
        .Calculation = xlCalculationAutomatic
        .ScreenUpdating = True
        .DisplayAlerts = True
    End With
End Sub

#N/Aコードの先頭でfot をチェックする列を変更できる (そしておそらく変更する必要がある) ことに注意してください。

于 2012-05-16T06:43:23.977 に答える