2016-04-24 12 views
0

私はVBAでCOUNTIFを実行しようとしていますが、私はいくつかのresomエラー '438'を取得しています。VBA - Countifエラー '438'

Option Explicit 

Sub tools() 
' 

With Worksheets("Plans") 
    .Range("a:ar").AutoFilter Field:=2, Criteria1:="=Cv", Operator:=xlOr, Criteria2:="=Se" 
    .rows("6:6").Select 
    .Range(Selection, Selection.End(xlDown)).Select 
    .Selection.Delete Shift:=xlUp 
    .ShowAllData 
    .Range("A2:A" & .Cells(rows.Count, "e").End(xlUp).Row).FormulaR1C11 = "=COUNTIF(c[5],RC[5])" 
    .Range("A2:a" & .Cells(rows.Count, "e").End(xlUp).Row) = Range("A2:a" & .Cells(rows.Count, "e").End(xlUp).Row).Value2 
End With 

End Sub 

答えて

2

は、2つのエラー、それぞれ投げ '38' エラーが発生しました:Selection以来

.Selection.Delete Shift:=xlUp 

.FormulaR1C11 

だけでワークシートオブジェクトの有効なプロパティタイプミスではありません、それは必要があるためbe

FormulaR1C1 

いくつかの良いコーディング習慣があることのように従うこと以外:SelectSelection

セットの

  • 避けるの使用を、その代わりに、オブジェクトへの直接参照(範囲)を使用

  • は、の繰り返しを避けますWithキーワードを使用して同じ長い参照

    これは入力エラーを避けるでしょう

  • 全体の列または行に

    と制限を参照

  • 避けるには、実際に使用するセルを範囲

    これは特にCOUNTIF

のようなワークシート関数の使用にので、ここでのエラーのために改訂されたコードです上記の良いコーディング習慣についても同様です。

Option Explicit 

Sub tools() 

With Worksheets("Plans") 
    .Range("a:ar").AutoFilter Field:=2, Criteria1:="=Cv", Operator:=xlOr, Criteria2:="=Se" 

    With .rows("6:6") 
     Range(.Cells, .End(xlDown)).Delete Shift:=xlUp 
    End With 

    .ShowAllData 

    With .Range("A2:A" & .Cells(rows.Count, "e").End(xlUp).Row) 
     .FormulaR1C1 = "=COUNTIF(R1C[5]:R" & .rows(.rows.Count).Row & "C[5],RC[5])" 
     .Value = .Value2 
    End With 
End With 

End Sub 
+0

素晴らしい作品です。 –

+0

あなたは大歓迎です – user3598756