我正在尝试编写包含以下代码的代码:
WorksheetFunction.SumProduct((Columns(3) = ActiveCell.Value) + 0)
代码始终返回类型不匹配错误!
我正在使用这行代码来避免使用长度超过255的Countif函数。
提前致谢
这是原始代码:
Dim MyColumn As Long, r As Long, lngLastRow As Long
MyColumn = ActiveCell.Column
With Sheets("Project Breakdown")
lngLastRow = .Cells(.Rows.Count, MyColumn).End(xlUp).Row
For r = lngLastRow To 1 Step -1
If InStr(1, Cells(r, MyColumn - 2), "DIV", vbTextCompare) = 0 And InStr(1, Cells(r, MyColumn - 2), "SEC", vbTextCompare) = 0 Then
If WorksheetFunction.CountIf(.Columns(MyColumn), .Cells(r, MyColumn).Value) > 1 Then
.Cells(r, MyColumn).Delete Shift:=xlUp
End If
End If
Next r
End With
countif返回错误,因为字符串的长度超过255,所以我尝试使用sumproduct函数,但无法使其工作。
答案 0 :(得分:0)
问题是您将Range与单个值进行比较。 这适用于excel公式,但不适用于vba。
一种解决方法是在工作表中使用额外的列,例如
=if($C1='some value',1,0)
然后取这一列的总和。
或者你可以在excel中计算sumproduct。在预定义的单元格(例如A1)中写入活动单元格的值,并让您的sumproduct使用此公式:
=sumproduct((C:C=$A$1)+0)
更新: 假设A1是一个空闲单元格,A2包含以下公式:
=SumProduct((C:C=$A$1)+0)
通过将A1的值更改为当前单元格,此公式包含结果。
Dim MyColumn As Long, r As Long, lngLastRow As Long
MyColumn = ActiveCell.Column
With Sheets("Project Breakdown")
lngLastRow = .Cells(.Rows.Count, MyColumn).End(xlUp).Row
For r = lngLastRow To 1 Step -1
If InStr(1, Cells(r, MyColumn - 2), "DIV", vbTextCompare) = 0 And InStr(1, Cells(r, MyColumn - 2), "SEC", vbTextCompare) = 0 Then
.cells(1,1).value = .cells(r, MyColumn).value
' Might be necessary to call .Calculate here to assure that A2 contains its new value
If .cells(1,2) > 1 Then
.Cells(r, MyColumn).Delete Shift:=xlUp
End If
End If
Next r
End With