我总是在尝试实现以下内容时收到类型错配错误或除以零错误:我只想计算范围内唯一条目的数量,范围中的条目是“类”文本:
startRow = 3
startColumn = 1
col = "A"
Set topCell = Cells(startRow, startColumn)
Set bottomCell = Cells(Rows.Count, startColumn)
If IsEmpty(bottomCell) Then Set bottomCell = bottomCell.End(xlUp)
Set selectRows = Range(col & topCell.Row & ":" & col & bottomCell.Row)
nRows = WorksheetFunction.CountA(selectRows)
test = WorksheetFunction.SumProduct(WorksheetFunction.IsText(selectRows) / WorksheetFunction.CountIf(selectRows, selectRows))
我在测试计算中有一个错误,但我没有得到它。一些帮助非常感谢
非常感谢
BR 马丁
答案 0 :(得分:0)
您的第一个问题是WorksheetFunction.CountIf(selectRows, selectRows)
计算的test
部分。当没有重复时,这将导致除以零错误。输入工作表时也会发生这种情况,因此您需要更改逻辑,或首先测试此案例。
我认为您的Type Mismatch
问题是由WorksheetFunction.IsText(selectRows)
细分引起的。我无法弄清楚是什么导致它,但正如我在评论中提到的,我认为IsText()
函数可能不会像在键入单元格时那样在VBA中占用范围。
我可能会以不同的方式解决这个问题。这是我在SO Count unique values in Excel其他地方找到的一个例子 这主要有工作表公式,但有一个答案可能适应你可能适应的VBA代码。
另一种选择是创建一个集合并计算元素的数量
Sub CountUnique()
Dim Col As New Collection
Dim i As Integer
On Error Resume Next
For i = 3 To 10
Col.Add Sheet1.Cells(i, 1).Value, Sheet1.Cells(i, 1).Value
Next
MsgBox Col.Count
On Error GoTo 0
End Sub