Countif公式为vba给出运行时错误1004

时间:2015-05-27 07:54:54

标签: vba excel-vba excel

我正在尝试将Countif公式转换为vba格式,但它给我一个运行时错误1004应用程序或对象定义错误...

我的代码和公式:

例如,

=COUNTIF('Sheet1'!$D$14:$D$3000,$B25)-COUNTIFS('Sheet1'!$D$14:$D$3000,B25,'Sheet1'!$E$14:$E$3000,"No Test")

Range("A1").Formula = "=COUNTIF('Sheet1'!" & Sheets("Sheet1").Range(Cells(14, 4), Cells(3000, 4)).Address(False, False) & "," & _ 
Sheets("Sheet1").Cells(25, 2).Address(False, False) & ") -" & _
"Countifs('Sheet1'!" & Sheets("Sheet1").Range(Cells(14, 4), Cells(3000, 4)).Address(False, False) & "," & _ 
Sheets("Sheet1").Cells(25, 2).Address(False, False) & ",'Sheet1!" & _
Sheets("Sheet1").Range(Cells(14, 5), Cells(3000, 5)).Address(False, False) & ", ""No Test"")"

3 个答案:

答案 0 :(得分:3)

您还没有使用工作表对象正确限定所有.Cells次来电,但由于您只需要地址,因此您实际上并不需要指定工作表:

Range("A1").Formula = "=COUNTIF('Sheet1'!" & Range(Cells(14, 4), Cells(3000, 4)).Address(False, False) & "," & _ 
Cells(25, 2).Address(False, False) & ") -" & _
"Countifs('Sheet1'!" & Range(Cells(14, 4), Cells(3000, 4)).Address(False, False) & "," & _ 
Cells(25, 2).Address(False, False) & ",'Sheet1'!" & _
Range(Cells(14, 5), Cells(3000, 5)).Address(False, False) & ", ""No Test"")"

答案 1 :(得分:3)

除了公式本身 - 您报告错误的原因是因为在删除工作表名称时缺少撇号:

以下填写公式,因为我认为这是必需的:

Range("A1").Formula = "=COUNTIF('Sheet1'!" & Sheets("Sheet1").Range(Cells(14, 4), Cells(3000, 4)).Address(False, False) & "," & _
Sheets("Sheet1").Cells(25, 2).Address(False, False) & ") -" & _
"Countifs('Sheet1'!" & Sheets("Sheet1").Range(Cells(14, 4), Cells(3000, 4)).Address(False, False) & "," & _
Sheets("Sheet1").Cells(25, 2).Address(False, False) & ",'Sheet1'!" & _
Sheets("Sheet1").Range(Cells(14, 5), Cells(3000, 5)).Address(False, False) & ", ""No Test"")"

答案 2 :(得分:2)

您指定了范围的父级,但未指定 Cells 的父级。 Cells默认为另一个工作表的单元格。基本上你是说给我一个Sheet1的范围,其中包含Sheet2 中的单元格。

使用With / End With并在前缀.Range.Cells前加上句点来显示父母身份。

Dim ws2 As Worksheet

Set ws2 = Sheets("Sheet2")

With Sheets("Sheet1")
    ws2.Range("A1").Formula = "=COUNTIF(" & .Range(.Cells(14, 4), .Cells(3000, 4)).Address(0, 0, external:=True) & "," & .Cells(25, 2).Address(0, 0) & ")-" & _
       "COUNTIFS(" & .Range(.Cells(14, 4), .Cells(3000, 4)).Address(0, 0, external:=True) & "," & .Cells(25, 2).Address(0, 0) & ", " & _
       .Range(.Cells(14, 5), .Cells(3000, 5)).Address(0, 0, external:=True) & ", ""No Test"")"
End With

请注意,我已使用 external:= True 来包含工作表名称。关于B25属于哪个工作表似乎存在一些混淆。

这是公式解决的:

=COUNTIF(Sheet1!D14:D3000, B25)-COUNTIFS(Sheet1!D14:D3000, B25, Sheet1!E14:E3000, "No Test")