1

特定の基準に基づいて Excel シートの行を削除しようとしています。ある時点で、次のタイプの不一致エラーが発生します。

ss

部分的に作成されたシートから理解する限り、DO ループ内でエラーが発生します。

Or Len(Cells(r, 1)) = 5 _
Or Int(Right(Cells(r, 1), 4)) > 4000 _
Or Cells(r, 3) = 0

部。エラーを修正するにはどうすればよいですか? さらに、より高速に実行できるようにコードを改善することをお勧めできれば、本当に感謝しています。完全なコードは次のとおりです。

Sub delrows()

Dim r, RowCount As Long
r = 2

ActiveSheet.Columns(1).Select
RowCount = UsedRange.Rows.Count
userresponse = MsgBox("You have " & RowCount & " rows", vbOKOnly, "Info")

Rows(RowCount).Delete Shift:=xlUp

' Trim spaces

Columns("A:A").Select
Selection.Replace What:=" ", Replacement:="", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, searchFormat:=False, _
    ReplaceFormat:=False

' Delete surplus columns

Range("L:T,V:AA,AE:AG,AR:AR,AU:AU,AZ:AZ").Select
    Selection.Delete Shift:=xlToLeft

' Delete surplus rows

Do
    If Left(Cells(r, 1), 1) = "D" _
       Or Left(Cells(r, 1), 1) = "H" _
       Or Left(Cells(r, 1), 1) = "I" _
       Or Left(Cells(r, 1), 2) = "MD" _
       Or Left(Cells(r, 1), 2) = "ND" _
       Or Left(Cells(r, 1), 3) = "MSF" _
       Or Left(Cells(r, 1), 5) = "MSGZZ" _
       Or Len(Cells(r, 1)) = 5 _
       Or Int(Right(Cells(r, 1), 4)) > 4000 _
       Or Cells(r, 3) = 0 Then
     Rows(r).Delete Shift:=xlUp
    Else: r = r + 1
    End If
Loop Until (r = RowCount)

End Sub
4

1 に答える 1

4

条件Or Int(Right(Cells(r, 1), 4))は、評価しているセルの内容の部分が数値であると想定しているため、懸念事項です。

数値ではないことが判明した場合、Int()関数は、表示されているタイプの不一致エラーをスローします。

Int()関数を適用する前に、実際に数値であるかどうかを最初にテストした方がよいでしょう。IsNumeric()関数を使用してこれを行うことができます。

于 2012-12-07T14:31:54.810 に答える