0

在尝试实现以下操作时,我总是收到类型不匹配错误或除以零错误:我只想计算一个范围内唯一条目的数量,该范围内的条目是“类”文本:

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马丁

4

1 回答 1

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
于 2012-05-11T13:13:10.130 回答