如何计算 Excel 中逗号分隔列表和引用列之间的匹配数?

如何计算 Excel 中逗号分隔列表和引用列之间的匹配数?

我有一组用逗号分隔的数字。每组数字代表与项目相关的一系列唯一数字。我如何编写公式来搜索参考表中列表中的任意数量的项目并返回硬编码值?

我将在下面为每个工作表提供示例(已匿名化)(表 1-5)以及预期输出。我猜想这与 SUM、FREQUENCY、INDEX 或其他数组公式有关,但我搞不懂。您可以查看我的问题这里也是,但是它包含许多相同的信息。

我用过“屁股””F“ail”和“issing”,但一切正常。

逻辑:

该公式应执行以下步骤。

  1. 从 C 列的每个单元格中提取数字列表表 4
  2. 搜索表3(D 列)中出现的数字。2b
    . 如果出现列表中的任何数字,请检查审核是否失败(在 D 列中用“失败”文本表示)。表3)。2c
    . 如果有,则打印F.
    2d. 如果没有,则打印
  3. 如果列表中没有出现任何数字,则打印

表格:

表格1

此表是主要参考表。它列出了每个 UID 对应的名称、服务器和项目。

 Unique ID     Name         Server Address     Project
 10000         Company 1    Server 1           Project 1
 10001         Company 2    Server 2           Project 2
 10002         Company 3    Server 3           Project 3
 10003         Company 3    Server 3           Project 4
 10004         Company 3    Server 3           Project 5
 10005         Company 3    Server 3           Project 6
 10006         Company 4    Server 4           Project 7
 10007         Company 4    Server 4           Project 7
 10008         Company 4    Server 4           Project 7
 10009         Company 5    Server 5           Project 8
 10010         Company 6    Server 6           Project 9
 10011         Company 7    Server 7           Project 10
 10012         Company 8    Server 8           Project 11
 10013         Company 8    Server 8           Project 11
 10014         Company 8    Server 8           Project 11
 10015         Company 8    Server 8           Project 11
 10016         Company 8    Server 8           Project 11
 10017         Company 8    Server 8           Project 11
 10018         Company 8    Server 8           Project 11
 10019         Company 8    Server 8           Project 11
 10020         Company 8    Server 8           Project 11
 10021         Company 9    Server 9           Project 12
 10022         Company 10   Server 10          Project 13
 10023         Company 11   Server 10          Project 14
 10024         Company 12   Server 10          Project 15
 10025         Company 13   Server 10          Project 16
 10026         Company 14   Server 10          Project 17
 10027         Company 15   Server 10          Project 18
 10028         Company 16   Server 10          Project 19
 10029         Company 17   Server 10          Project 20
 10030         Company 18   Server 10          Project 21
 10032         Company 19   Server 10          Project 23
 10033         Company 19   Server 10          Project 24

表 2

该表包含与以下表相同的信息表格1但将每个 UID 分组到其各自的项目中。我目前实际上没有使用它,但它可能有用?如果没有用,我会删除。

 Company Trading Name     Project     UID     UID     UID     UID
 Company 1                Project 1   10000
 Company 2                Project 2   10001
 -----------------------------------------------------
 Company 4                Project 7   10006   10007   10008

表3

此表是粘贴审计结果的地方。它们完全遵循此布局,如果审计未通过,注释列将显示失败字样(条件格式当前突出显示此字样),并且 UID 会通过简单的 LEFT 函数提取。然后,名称和公司列使用 VLOOKUP 针对 UID表格1获取名称/服务器。

Notes                                   Time Rec.      UID     Name        Server
Audit for company passed:10001          auto           10001   Company 2   Server 2  
Audit for company passed:10006          auto           10006   Company 4   Server 4
Audit for company failed:10007          auto           10007   Company 4   Server 4  

表 4

这是审计表。公式将进入 D 列,输出将作为每天的值复制/粘贴。我在这里填写了一些示例,说明之后应该是什么样子。

 Server     Name         Project (UID)                          Today's Date
 Server 1   Company 1    Project 1 (10000)                       P
 Server 2   Company 2    Project 2 (10001)                       N
 Server 3   Company 3    Project 3 (10002,10003,10004,10005)     F
 Server 4   Company 4    Project 4 (10006,10007,10008)           P
 -----------------------------------------------------
 Server 10  Company 10  Project 13 (10022)                       P
 Server 10  Company 11  Project 14 (10023)                       M
 Server 10  Company 12  Project 15 (10024)                       P
 Server 10  Company 13  Project 16 (10025)                       P
 Server 10  Company 15  Project 18 (10027)                       F
 Server 10  Company 16  Project 19 (10028)                       P
 Server 10  Company 17  Project 20 (10029)                       M
 Server 10  Company 18  Project 21 (10030)                       P
 Server 10  Company 19  Project 22 (100310)                      P
 Server 10  Company 19  Project 23 (10032)                       P
 Server 10  Company 19  Project 24 (10033)                       M

或者我有第五张桌子,表 5,它会自动查找任何缺失的 ID表3使用以下公式:

=INDEX(Reference!$A$2:$A$160, SMALL(IF(ISERROR(MATCH(Reference!$A$2:$A$160, Check!$D$2:$D$350, 0)), (ROW(Reference!$A$2:$A$160)-MIN(ROW(Reference!$A$2:$A$160))+1), ""), ROWS($A$1:A1)))

什么时候表3为空(每天都会清除),这仅列出每个项目。当将任意数量的审计粘贴到表3然而,表 5将更新以显示缺失的内容。也许有办法将其纳入最终公式。

如果有人需要的话,我有一个匿名版本。

谢谢。

edit1:有人请求更多系统详细信息。这是在使用 Excel 365 的 Windows 10 环境中。

答案1

我尝试过一种方法,我承认这种方法不太可扩展,而且使用了一些辅助列。我不太确定是否有直接的方法可以一次性查找逗号分隔的值。也许可以,但我不是 Excel 专家。

此外,我认为 Office 365 桌面版支持 VBA 宏。如果您有桌面版,您可以选择更精简的 VBA 宏解决方案。但我认为在线版不支持宏。

请参阅下面的快照。

在此处输入图片描述

有 5 个辅助列。H、M、N、O、P。H 可能是可选的,但我更喜欢使用简单的数字序列,因为您的服务器名称可能实际上没有以数字作为最后一个字符,例如服务器 1、服务器 2 的顺序。

在M4中输入以下公式并将其拖下来。

=SUBSTITUTE(RIGHT(K4,LEN(K4)-FIND("(",K4)),")","")

这将创建一个以逗号分隔的 UID 列表

在 N4 中输入以下公式并将其向下拖到临时单元格数。当没有内容可显示时,单元格内容将为空白,但会向下扩展以供以后配置,因为 UID 数量可能会有所不同。

=VALUE(TRIM(MID(SUBSTITUTE(TEXTJOIN(",",TRUE,$M$4:$M$22),",",REPT(" ",99)),(ROW(1:1)-1)*99+1,99)))

在O4中输入以下公式并将其拖下来。

=IF(ISNUMBER(VALUE(N4)),MATCH("*"&N4&"*",$M$4:$M$22,0),"")

这列出了稍后将使用的 UID 的位置。

在P4中输入以下公式并将其拖下来。

=IF(ISNUMBER(VALUE(N4)),IF(ISNUMBER(FIND("passed",INDEX($B$4:$B$22,MATCH(VALUE(N4),$D$4:$D$22,0)))),"P",IF(ISNUMBER(FIND("failed",INDEX($B$4:$B$22,MATCH(VALUE(N4),$D$4:$D$22,0)))),"F","M")),"")

这决定了表 4 中每个 UID 的状态。

现在我的示例中的输出是 L 列。

在 L4 中输入以下公式并将其拖下来。

=IF(COUNTIFS($O$4:$O$22,H4,$P$4:$P$22,"M")=COUNTIF($O$4:$O$22,H4),"M",IF(COUNTIFS($O$4:$O$22,H4,$P$4:$P$22,"P")+COUNTIFS($O$4:$O$22,H4,$P$4:$P$22,"M")=COUNTIF($O$4:$O$22,H4),"P","F"))

这将应用最终逻辑,根据辅助列中的转置列表来决定审计状态“通过”、“失败”或“丢失”。

您可以将这些数据集转换为 Excel 表并使用表 [标题] 引用使其更具动态。

尝试一下,看看这对您是否有用。我承认它不是那么好,因为它使用了几个辅助列。这个想法是将逗号分隔的列表转置到连续的单元格,然后应用查找。

相关内容