32位的Excel 365上64位的Win7 工作表300600排x 105列 目标:计算在每个Column唯一计数(Excel的VBA VS式)更快的方法
尝试的解决方案1的唯一条目的数量:式
{=SUM(1/COUNTIF(A8:A300600,A8:A300600))}
问题:长期运行时,冻结的Excel,必须停止计算
尝试性解决方案2:VBA UDF
Function UniqueCount(Selection As Range) As Integer
Dim UniqueArray()
ReDim UniqueArray(0 To Selection.Count)
Dim Rng As Range
Dim CUniqueCount As Integer
CUniqueCount = 0
For Each Rng In Selection
For i = 0 To Selection.Count
If UniqueArray(i) = Rng.Value Then Exit For
If UniqueArray(i) = "" Then
UniqueArray(i) = Rng.Value
CUniqueCount = CUniqueCount + 1
Exit For
End If
Next i
Next
UniqueCount = CUniqueCount
End Function
注:这是速度更快,但我仍然在寻找更快的接近
您是否试过数据模型的数据透视表? – pnuts
我还没有,我这样做的原因是为了将数据集分解成更小的表格,以便上传到我的访问数据库中 - 数据集对于访问的内存限制太大而无法在内部中断。我想我也会通过数据透视表来达到这些限制。当在所有105列中应用公式化方法时,我遇到了同样的限制。 – Schalton
我相信PowerPivot也许能够应付,包括计数和肢解。 – pnuts