Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel:如何根据不同列中的值计算唯一值的总数_Excel_Excel Formula - Fatal编程技术网

Excel:如何根据不同列中的值计算唯一值的总数

Excel:如何根据不同列中的值计算唯一值的总数,excel,excel-formula,Excel,Excel Formula,我试图根据推荐指标计算订单总数。在我的表中,我有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 9

我试图根据推荐指标计算订单总数。在我的表中,我有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")
但是,这将返回包括重复项在内的总计

我也试过:

=SUMPRODUCT(1/COUNTIFS(A:A, A:A, C:C, "=EMP_BC"))
但是,这会导致我的excel冻结。。。我想这是因为我有很多记录。。。我有六万多张唱片

[编辑] 我期望得到以下结果:

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
我目前有一个专门设置的选项卡,以便可以将数据复制并粘贴到选项卡中。另一个包含所有公式的选项卡将引用数据并显示结果。 这一指标给了我很多问题


有什么建议吗?

这里有一个数组公式,可以满足您的需要。要输入数组公式,请在按住ctrl键的同时按enter键。如果操作正确,Excel将在公式周围放置大括号{…}

=SUM(IFERROR(1/COUNTIFS(order_id,order_id,referral,"EMP_BC"),0))
此公式假设范围仅包含使用的范围,而不是整个列

即使引用范围有限,用VBA编写的用户定义函数也可能执行得更快

要输入此用户定义函数UDF,alt-F11将打开Visual Basic编辑器。 确保项目在“项目资源管理器”窗口中高亮显示。 然后,从顶部菜单中选择Insert/Module并将下面的代码粘贴到打开的窗口中

要使用此用户定义函数UDF,请在某些单元格中输入一个公式,如=UniqueOrdersByReferralorder\u id、refloration、EMP\u BC


你想做什么有点不清楚。您希望公式为该表返回什么值,以及您是如何一步一步地确定这是正确的结果的?否,因为我想将EMP_BC有8个唯一的顺序归为属性。我只需要一个“数字”值来返回对唯一订单ID的计数,其中reflection column='emp_bc'正如@pnuts所写的,为什么要从预期结果中排除9073169168。如果包括在内,将有9个订单。如果你使用透视表,你可以过滤推荐;折叠结果,然后使用SUBTOTAL函数仅计算可见行。我的错误应该包括并返回9。我已经尝试过,但对于60k行,重复检查似乎会杀死excel并将其挂起。虽然您有一个if错误,但我会看看这是否有区别。@Rick如果没有IFERROR,您将得到DIV/0错误;EMP_BC前面的=符号为superfluous@Rick此外,尝试使用仅包含所用范围的范围;没有空白。看看这是否能加快速度。谢谢Ron,我会尝试udf方法并报告。Ron,效果很好。非常感谢。你帮我省去了很多麻烦。我最后的办法是使用透视表。。。仅仅是出于美学上的格式限制,我试图避免它。
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