2015-05-29 120 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:正確。 :)代碼未經測試。現在休息了。謝謝 –