Excel:如何根据来自不同列的值计算唯一值的总数
Excel: How to count total number of unique values based on a value from a different column
我正在尝试根据推荐指标计算订单总数。在我的 table 中,我有 3 列。
order_id (a), sku (b), referral (c)
9073765908 19333476 EMP_BC
9073765908 18717916 EMP_BC
9073741228 23224786 EMP_BC
9073729088 15870816 EMP_BC
9073238838 15927306 EMP_BC
9073216258 23210836 EMP_BC
9073216258 18709096 EMP_BC
9073216258 18705756 EMP_BC
9073169568 19333496 EMP_BC
9073169168 18714626 EMP_BC
9072921778 22723516 EMP_ES
9072921778 18708696 EMP_ES
9072921778 15933746 EMP_ES
9072910758 23223526 EMP_BC
9072910758 23184416 EMP_BC
9072910758 21081716 EMP_BC
9072910758 18704496 EMP_BC
9072895968 21082646 EMP_ES
9072856628 28685906 EMP_BC
9072856628 23795646 EMP_BC
9072856628 21447106 EMP_BC
9072856628 15936966 EMP_BC
以下是我迄今为止尝试过的所有方法:
=COUNTIFS(C:C, "=EMP_BC")
但是这个 returns 总数包括重复项。
也试过这个:
=SUMPRODUCT(1/COUNTIFS(A:A, A:A, C:C, "=EMP_BC"))
然而,这导致我的 excel 冻结...我假设这是由于我拥有的记录数量...我有超过 60K 条记录。
[编辑]
我预计会得到以下结果:
for EMP_BC: 8
because the following order_id is unique and the referral is EMP_BC:
9073765908
9073741228
9073729088
9073238838
9073216258
9073169568
9072910758
9072856628
我目前有一个专门设置的选项卡,以便它可以将数据复制并粘贴到选项卡中。包含所有公式的另一个选项卡将引用数据并显示结果。
这个指标给我带来了很多问题。
有什么建议吗?
这是一个数组公式,应该可以完成您想要的。要输入数组公式,请在按下 enter
的同时按住 ctrl-shift
。如果操作正确,Excel 将在公式周围放置大括号 {...}
。
=SUM(IFERROR(1/COUNTIFS(order_id,order_id,referral,"EMP_BC"),0))
此公式假定范围仅包含已使用的范围,而不是整个列。
用 VBA 编写的用户定义函数有可能执行得更快,即使引用范围有限。
要输入此用户定义函数 (UDF),alt-F11
打开 Visual Basic 编辑器。
确保您的项目在 Project Explorer window 中突出显示。
然后,从顶部菜单中,select Insert/Module
并将下面的代码粘贴到打开的 window 中。
要使用此用户定义函数 (UDF),请在某些单元格中输入类似 =UniqueOrdersByReferral(order_id,referral,"EMP_BC")
的公式。
Option Explicit
Option Compare Text 'Comment out this line to make case SENSITIVE
Function UniqueOrdersByReferral(rOrderID As Range, rReferral As Range, sReferralCode As String) As Long
Dim Col As Collection
Dim I As Long, vOID As Variant, vREF As Variant
vOID = rOrderID
vREF = rReferral
If UBound(vOID) <> UBound(vREF) Then
MsgBox "Order ID and Referral Ranges must be of same size"
Exit Function
End If
Set Col = New Collection
On Error Resume Next
For I = 1 To UBound(vOID)
If vREF(I, 1) = sReferralCode Then Col.Add vOID(I, 1), CStr(vOID(I, 1))
Next I
On Error GoTo 0
UniqueOrdersByReferral = Col.Count
End Function
我正在尝试根据推荐指标计算订单总数。在我的 table 中,我有 3 列。
order_id (a), sku (b), referral (c)
9073765908 19333476 EMP_BC
9073765908 18717916 EMP_BC
9073741228 23224786 EMP_BC
9073729088 15870816 EMP_BC
9073238838 15927306 EMP_BC
9073216258 23210836 EMP_BC
9073216258 18709096 EMP_BC
9073216258 18705756 EMP_BC
9073169568 19333496 EMP_BC
9073169168 18714626 EMP_BC
9072921778 22723516 EMP_ES
9072921778 18708696 EMP_ES
9072921778 15933746 EMP_ES
9072910758 23223526 EMP_BC
9072910758 23184416 EMP_BC
9072910758 21081716 EMP_BC
9072910758 18704496 EMP_BC
9072895968 21082646 EMP_ES
9072856628 28685906 EMP_BC
9072856628 23795646 EMP_BC
9072856628 21447106 EMP_BC
9072856628 15936966 EMP_BC
以下是我迄今为止尝试过的所有方法:
=COUNTIFS(C:C, "=EMP_BC")
但是这个 returns 总数包括重复项。
也试过这个:
=SUMPRODUCT(1/COUNTIFS(A:A, A:A, C:C, "=EMP_BC"))
然而,这导致我的 excel 冻结...我假设这是由于我拥有的记录数量...我有超过 60K 条记录。
[编辑] 我预计会得到以下结果:
for EMP_BC: 8
because the following order_id is unique and the referral is EMP_BC:
9073765908
9073741228
9073729088
9073238838
9073216258
9073169568
9072910758
9072856628
我目前有一个专门设置的选项卡,以便它可以将数据复制并粘贴到选项卡中。包含所有公式的另一个选项卡将引用数据并显示结果。 这个指标给我带来了很多问题。
有什么建议吗?
这是一个数组公式,应该可以完成您想要的。要输入数组公式,请在按下 enter
的同时按住 ctrl-shift
。如果操作正确,Excel 将在公式周围放置大括号 {...}
。
=SUM(IFERROR(1/COUNTIFS(order_id,order_id,referral,"EMP_BC"),0))
此公式假定范围仅包含已使用的范围,而不是整个列。
用 VBA 编写的用户定义函数有可能执行得更快,即使引用范围有限。
要输入此用户定义函数 (UDF),alt-F11
打开 Visual Basic 编辑器。
确保您的项目在 Project Explorer window 中突出显示。
然后,从顶部菜单中,select Insert/Module
并将下面的代码粘贴到打开的 window 中。
要使用此用户定义函数 (UDF),请在某些单元格中输入类似 =UniqueOrdersByReferral(order_id,referral,"EMP_BC")
的公式。
Option Explicit
Option Compare Text 'Comment out this line to make case SENSITIVE
Function UniqueOrdersByReferral(rOrderID As Range, rReferral As Range, sReferralCode As String) As Long
Dim Col As Collection
Dim I As Long, vOID As Variant, vREF As Variant
vOID = rOrderID
vREF = rReferral
If UBound(vOID) <> UBound(vREF) Then
MsgBox "Order ID and Referral Ranges must be of same size"
Exit Function
End If
Set Col = New Collection
On Error Resume Next
For I = 1 To UBound(vOID)
If vREF(I, 1) = sReferralCode Then Col.Add vOID(I, 1), CStr(vOID(I, 1))
Next I
On Error GoTo 0
UniqueOrdersByReferral = Col.Count
End Function