我正在尝试将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"")"
答案 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")