2015-05-29 119 views
2

下面的公式转换成代码,当我收到运行时错误1004运行时错误1004:以计数和COUNTIF公式VBA

当我尝试唯一要考虑的伯爵forumlas,这是工作。

公式:

=(COUNT(C25:C26)-COUNTIF(C25:C26,0))/(COUNT(E25:E26)-COUNTIF(E25:E26,0)) 

代码:

Sheets("Sheet1").Cells(29, 3).Formula = "=(COUNT(" & Sheets("Sheet1").Range(Cells(25, 3), Cells(26, 3)).Address(False, False) _ 
& "- COUNTIF(" & Sheets("Sheet1").Range(Cells(25, 3), Cells(26, 3)).Address(False, False) & ",0)/" & _ 
"(COUNT(" & Sheets("Sheet1").Range(Cells(25, 5), Cells(26, 5)).Address(False, False) _ 
& "- COUNTIF(" & Sheets("Sheet1").Range(Cells(25, 5), Cells(26, 5)).Address(False, False) & ",0))" 
+0

完全限定'Cells(25,3)'到'Sheets(“Sheet1”)。Cells(25,3)'。同样对于其他人 –

+0

您也可以声明'Dim ws Worksheet:Set ws = ThisWorkbook.Sheets(“Sheet1”)'这样你可以写'Sheets(“Sheet1”)。单元格(29,3) ws.Cells(29,3)'。同样,你可以用'ws'来代替所有'Sheets(“Sheet1”)''。减少键入和更容易管理;) –

+0

@SiddharthRout我可以问你是什么意思,完全限定细胞? – user1204868

回答

2

忘记一些brakets /括号,让空间

With Sheets("Sheet1") 
    .Cells(29, 3).Formula = _ 
    "=(COUNT(" & .Range(.Cells(25, 3), .Cells(26, 3)).Address(False, False) _ 
    & ")-COUNTIF(" & .Range(.Cells(25, 3), .Cells(26, 3)).Address(False, False) & ",0))/" & _ 
    "(COUNT(" & .Range(.Cells(25, 3), .Cells(26, 3)).Address(False, False) _ 
    & ")-COUNTIF(" & .Range(.Cells(25, 3), .Cells(26, 3)).Address(False, False) & ",0))" 
End With 

使用字符串变量进行调试并用MsgBox提示。

Dim StrFormula As String 
With Sheets("Sheet1") 
    StrFormula = _ 
    "=(COUNT(" & .Range(.Cells(25, 3), .Cells(26, 3)).Address(False, False) _ 
    & ")-COUNTIF(" & .Range(.Cells(25, 3), .Cells(26, 3)).Address(False, False) & ",0))/" & _ 
    "(COUNT(" & .Range(.Cells(25, 3), .Cells(26, 3)).Address(False, False) _ 
    & ")-COUNTIF(" & .Range(.Cells(25, 3), .Cells(26, 3)).Address(False, False) & ",0))" 
End With 
MsgBox StrFormula 
+0

如果你完全限定你的细胞对象,那么这将是OP想要的:) –

+0

现在它变得更有意义;) –

+1

如果我需要限定'Cells'到内部还是没有,我总是对'Range'犹豫不决,但现在我会记得的! Thx队友! ;) – R3uK

2

不要使它混乱的,

Range("C29") = _ 
"=(COUNT(Sheet1!R[-4]C:R[-3]C)-COUNTIF(Sheet1!R[-4]C:R[-3]C,0))/(COUNT(Sheet1!R[-4]C[2]:R[-3]C[2])-COUNTIF(Sheet1!R[-27]C[2]:R[-4]C[2],0))" 
'or 
Range("C29") = _ 
"=(COUNT(Sheet1!C25:C26)-COUNTIF(Sheet1!C25:C26,0))/(COUNT(Sheet1!E25:E26)-COUNTIF(Sheet1!E2:E25,0))" 
2

继我的意见,这是你将如何限定你的细胞目的。注意细胞之前的DOT?

测试

Sub Sample() 
    Dim ws As Worksheet 
    Dim sFormula As String 

    Set ws = ThisWorkbook.Sheets("Sheet1") 

    With ws 
     sFormula = "=(COUNT(" & _ 
        .Range(.Cells(25, 3), .Cells(26, 3)).Address(False, False) & ")" & _ 
        "- COUNTIF(" & _ 
        .Range(.Cells(25, 3), .Cells(26, 3)).Address(False, False) & ",0))/" & _ 
        "(COUNT(" & _ 
        .Range(.Cells(25, 3), .Cells(26, 3)).Address(False, False) & ")" & _ 
        "- COUNTIF(" & _ 
        .Range(.Cells(25, 3), .Cells(26, 3)).Address(False, False) & ",0))" 

     Debug.Print sFormula 

     .Cells(29, 3).Formula = sFormula 
    End With 
End Sub 
+0

您错过了我的答案中更正的空格和括号;) – R3uK

+0

@ R3uK:正确。 :)代码未经测试。现在休息了。谢谢 –