Excel如何在不使用VBA的情况下从逗号分隔列表中查找匹配元素的所有行

2023-12-01

这是我的问题,我有一个包含两列的表:产品参考和相应的通知 ID:

 | A       | B      | C      | D      |
---------------------------------------
1| Product | Notice |        |        |
2| p1      | n1     |        |        |
3| p2      | n2     |        |        |
4| p3      | n3     |        |        |
5|         |        |        |        |
6|         |        | p1, p3 | =...   |

(edit:在我的现实生活应用程序中,“产品参考”和“通知 ID”列不是并排而是由其他列分隔开)

在另一个单元格(例如 C6)中,我有一个以逗号分隔的产品参考列表,比方说p1, p3我需要一个公式来输出相应的通知ID,即n1, n3在本例中,位于单元格 D6 中。

重要的:由于不同的原因,我无法使用VBA,我需要一个标准的excel数组公式。

这是我目前可以做的:

  1. FILTERXML函数,我可以将逗号分隔的列表拆分为一个数组:FILTERXML("<t><s>" & SUBSTITUTE(C6, ", ", "</s><s>") & "</s></t>", "//s")

  2. TEXTJOIN函数,我可以将数组合并为字符串。

  3. 我可以通过组合提取单个匹配项INDEX and MATCH函数,例如:

=IF(ISERROR(MATCH("p3"; A:A; 0)); "not found"; INDEX(B:B; MATCH("p3"; A:A; 0)))

(这对我来说没有用,因为 A 列中的引用再次是唯一的)

(顺便说一句,我不知道是否有更好的方法来处理由MATCH当没有找到匹配项时)

  1. 我可以提取 B 列中与多个匹配项对应的元素并将其连接到 a单一参考在 A 列中(使用 Ctrl+Shift+Enter 激活数组公式):
{=TEXTJOIN(", "; TRUE; IF(A:A="p2"; B:B; ""))}

(这对我来说没有用,因为 A 列中的引用再次是唯一的)

总之:我可以查找多个匹配项并将其合并到单个引用,但无法查找单个唯一匹配项并将其合并到多个引用(我想要做的)。


失败的尝试

我尝试以不同的方式混合以前的公式来得到我想要的,但都失败并出现错误。

  • 结合 1、2 和 4(使用OR在匹配的布尔数组上):
{=TEXTJOIN(", "; TRUE; IF(OR(A:A=FILTERXML("<t><s>" & SUBSTITUTE(C6, ", ", "</s><s>") & "</s></t>", "//s")); B:B; ""))}

或(使用SUM在匹配的布尔数组上):

{=TEXTJOIN(", "; TRUE; IF(SUM(A:A=FILTERXML("<t><s>" & SUBSTITUTE(C6, ", ", "</s><s>") & "</s></t>", "//s")); B:B; ""))}

在这里,我不确定如何处理中考虑的不同数组IF(A 列和参考文献列表由FILTERXML).

  • 结合 1、2 和 3:
{=TEXTJOIN(", "; TRUE; INDEX(B:B; MATCH(FILTERXML("<t><s>" & SUBSTITUTE(C6, ", ", "</s><s>") & "</s></t>", "//s"); A:A; 0)))}

在这里,我不确定如何再次处理 (i) 所考虑的不同数组(A 列和由FILTERXML), (ii) 引起的误差MATCH当没有找到匹配时,(iii) 数组引用传递给INDEX功能。


好问题。如果您只有 Excel 2019,您可以选择:

enter image description here

公式为E1:

=TEXTJOIN(", ",,IFERROR(VLOOKUP(FILTERXML("<t><s>"&SUBSTITUTE(D1,", ","</s><s>")&"</s></t>","//s"),A:B,2,FALSE),""))

如果您有 Excel O365,那么也许:

=TEXTJOIN(", ",,XLOOKUP(FILTERXML("<t><s>"&SUBSTITUTE(D1,", ","</s><s>")&"</s></t>","//s"),A:A,B:B,"",0))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Excel如何在不使用VBA的情况下从逗号分隔列表中查找匹配元素的所有行 的相关文章

  • Excel工作簿关闭后反复打开

    我使用了 Application ontime 方法来调度一些宏 关闭工作簿后 它会一次又一次地打开 为了解决这个问题 我在工作簿上设置了另一个事件 BeforeClosed 现在它显示运行时错误 1004 Object Applicati
  • 将 Excel 范围转换为 VBA 字符串

    我想将给定范围内的值转换为 VBA 字符串 其中原始单元格值由任何选定的列分隔符和行分隔符分隔 分隔符可以是一个字符或更长的字符串 行分隔符是行末尾的字符串 该字符串应该像我们从左上角 从左到右 到右下角读取文本一样完成 以下是范围 A1
  • Excel VBA - 添加自定义数字格式

    我有一个在 Excel 外部生成的文件 其中包含许多百分比 所有这些百分比都有一位小数 当导入到 Excel 中时 Excel 会在百分比中添加第二位小数 这似乎是 Excel 中百分比的某种默认格式 它只是添加了一个 0 我想将所有两位小
  • 使用 UISearchBar 过滤数组

    我目前正在使用以下代码来过滤数组并将结果显示在我的 tableView 中 问题是 只有当搜索与确切的单词匹配时 才会返回结果 如何更改数组过滤器以在输入时搜索每个字符 let data Mango Grape Berry Orange A
  • 我可以让这个 Ruby 代码更快并且/或使用更少的内存吗?

    我有一个Array of StringRuby 中的对象由如下单词组成 animals cat horse dog cat dog bird dog sheep chicken cow 我想将其转换为另一个Array of String对象
  • 如何循环结构体数组并显示所有键值

    我正在循环结构数组并尝试分配和存储所有键值 如果我将内循环包裹起来
  • 如何释放字符指针数组?

    我使用此方法将列表中的值转换为数组 以便在 execvp 系统调用中使用 char list2argarray struct shellvalue values int count char array char malloc count
  • numpy NPV 和 Excel NPV 有区别吗?

    我的 Excel 中有一行包含 11 个值 TotalSavings 0 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 贴现率为 0 08 我在 Excel 中使用 计算 NPVNPV
  • 删除二维数组C++[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 这两种释放二维数组的方法是否相似 int M new int 5 for int i 0 i lt 5 i M i new int 3 fo
  • 如果总和为 0,则查找并删除带标题的最后一列

    我想创建一个宏 查找带有标题的最后一列 并仅当该列的总和等于零时才将其删除 到目前为止 这是我尝试过的 Dim LastCol As Long Dim i As Long With ThisWorkbook Sheets Sheet1 Fo
  • VBA在多个文件夹中搜索特定子文件夹并移动其中的所有文件

    你能帮助我吗 我想要一个宏vba来搜索SPECIFIC例如 所有存在并移动其文件的文件夹和子文件夹之间的子文件夹 Xfolder P Desktop Folder1 subfolder SUBFOLDER1 Xfolder 我正在使用 VB
  • 使用静态指针的动态内存分配

    有人可以向我解释一下为什么下面的代码会这样工作吗 这里我已经初始化了outd作为文件中的静态指针code2 c 然后我动态地为其分配内存malloc 从单独文件中的主函数中一次又一次地调用它code1 c 它看起来整个数组以静态方式运行 因
  • 合并 2 个数组并合并数字键的结果

    我有 2 个数组 我希望通过每个数字键将其中合并 分组在一起 例如 Array1 2009 gt 131 2008 gt 940 2007 gt 176 2006 gt 1 Array2 2008 gt 9 2007 gt 3 我希望输出是
  • 为什么这个二维指针表示法有效,而另一个则无效[重复]

    这个问题在这里已经有答案了 这里我编写了一段代码来打印 3x3 矩阵的对角线值之和 这里我必须将矩阵传递给函数 矩阵被传递给指针数组 代码可以工作 但问题是我必须编写参数的方式如下 int mat 3 以下导致程序崩溃 int mat 3
  • 通过 Excel / VBA 调用 DLL 中的 C++ 函数在传递双参数时生成异常

    我试图通过 DLL 在 Excel VBA 中使用 C C 静态函数 我在 VS17 中调试时遇到异常 我怀疑这是参数传递方式的问题 它是双精度 EXCEL EXE 中 0x00007FFA28BBA14F kernel32 dll 处抛出
  • TypeScript 枚举到对象数组

    我有一个这样定义的枚举 export enum GoalProgressMeasurements Percentage 1 Numeric Target 2 Completed Tasks 3 Average Milestone Progr
  • 如何将 UDF 中的结构或类数组返回到数据帧列值中?

    d ID 1 pID 1000 startTime 2018 07 02T03 34 20 endTime 2018 07 03T02 40 20 ID 1 pID 1000 startTime 2018 07 02T03 45 20 en
  • 将 2D NumPy 数组按元素相乘并求和

    我想知道是否有一种更快的方法 专用 NumPy 函数来执行 2D NumPy 数组的元素乘法 然后对所有元素求和 我目前使用np sum np multiply A B 其中 A B 是相同维度的 NumPy 数组m x n 您可以使用np
  • 在 powershell 中打开 Excel 时出错

    我需要用以下命令打开 Excel 文件CorruptLoad来自 powershell 脚本的参数 但是当我尝试做到这一点时 出现错误Exception calling Open with 15 argument s open method
  • 将 Excel 文件读入 R 并锁定单元格

    我有一个 Excel 电子表格要读入 R 它受密码保护并锁定了单元格 我可以使用 excel link 导入受密码保护的文件 但我不知道如何解锁 取消保护单元格 excel link 给了我这个错误 gt

随机推荐

  • SSIS 中的 TFS 集成

    我有几个SSIS使用开发的包VS2013 NET 4 5 Framework 在一种解决方案中 很少有使用开发的软件包VS2012 NET 4 0 Framework 在另一个解决方案中 我想将这两种解决方案与TFS 目前 我已经集成了VS
  • 无法跟踪实体类型的实例,因为跟踪了具有相同键值的另一个实例[关闭]

    Closed 这个问题需要调试细节 目前不接受答案 我在 asp net core 2 0 中使用通用存储库模式 它无法处置存储库对象 当我要更新条目时 它已成功更新一次 但当我尝试更新更多时 它会抛出以下异常 无法跟踪实体类型 Compa
  • 如何使用函数返回两列

    我想用我的 SQL 函数返回 2 个值 CREATE OR REPLACE FUNCTION get avg prices RETURNS table avg sale price decimal avg rent price decima
  • 即使在 .NET 中使用 SQLParameter 也存在 SQL 注入示例?

    我听说当对 SQL Server 使用 ADO NET SQLParameter 参数化查询 时 仍然可以进行 SQL 注入 我正在寻找 C VB 代码中的真实示例作为证据 编辑 我正在寻找具体的工作示例 没有介绍 sql 注入或如何防止它
  • 使用自定义着色器渲染“硬”边缘

    我想重现使用创建的效果THREE EdgesHelper 在 硬 对象边缘上绘制边界 但使用自定义着色器而不是添加单独的着色器THREE Line目的 本质上我想做的事情这个演示 但仅适用于 硬 边界 例如边界不在两个共面之间 方法 应用类
  • ADFS + OpenID Connect 电子邮件声明和外部 ADFS

    我在 Windows Server 2016 上使用 OpenID Connect 设置 ADFS 时遇到困难 我已经设置 AD 进行测试 并且可以成功进行身份验证 但是电子邮件声明不在 id 令牌中 此外 我还在声明提供者信任中设置了外部
  • 需要获得超过 20 个区域监控通知

    我正在开发一个应用程序 用户可以在其中设置多个位置 当用户进入或离开特定位置边界时 我成功显示通知 现在 有一种情况 我需要为所有保存的位置提供监控 并且可能有数百个甚至更多 我在 Apple 论坛和许多地方读到过 iOS 设备只允许 20
  • 获取对特定消息做出反应的用户列表

    我正在学习discord py 我正在尝试获取对特定消息做出反应的用户列表 名称 ID 下面是我的代码 async def ga self ctx channel ctx channel users async for message in
  • 使用 HTML Agility 搜索所需数据后如何从网页中抓取数据

    我想从中获取信息这个网站 使用 HTML Agility Pack 进入我的 ASPX 页面 但我不能这样做 因为数据是在我在网页中搜索数据后加载的 我需要在5分钟的间隔后连续完成一些数据 您提到的网站中的搜索结果是使用 Javascrip
  • 将减法结果限制为最小值为零

    我有一个向量 x 其值范围从 0 到 1 例如x lt c 0 0 5 1 我从 x 中减去 0 5 x 0 5 的结果x 0 5范围从 0 5 到 0 5 但是 我想将结果的最小值限制为 0 即新的范围将为 0 5 到 0 任何以前的负数
  • 使用 lcov 报告代码覆盖率时出错

    更新到 Ubuntu 16 04 后 我正在尝试对我的项目进行覆盖 我明白了 Deleted 665 files Writing data to coverage info cleaned lcov ERROR cannot write t
  • VS2010 中的 MFC100d.dll 问题

    我在 vs2010 上有一个 mfc c 项目 我可以在调试和发布模式下构建它 但是当我在调试模式下运行它时 它会给出以下 mfc100d dll 错误 我还安装了C 运行环境vcredist x86 exe问题仍然没有解决 我还设置了多线
  • JfreeChart:水平滚动 XYBarChart -(图表翻译和导航)

    我正在尝试水平滚动 XYBarChart 我正在关注 JfreeChart 的演示 TranslateDemo1 java 之一 您可以在其中找到源代码 源代码适用于 TimeSeriesChart 然而 我尝试使用 XYBarChart
  • Request.js 请求方法返回结果?

    var request require request var cheerio require cheerio request url function error response html if error response statu
  • 无法将 DBNull.Value 转换为类型“System.DateTime”。请使用可为 null 的类型

    这是我的代码 var finalResults from r in results AsEnumerable where r Field
  • window.open缓存问题

    我在用着窗口 打开在打开网页的函数中 该函数显示有关 当前页面 页面 URL 存储在 DB 中 某些页面需要身份验证 对于这些页面 我们第一次调用它们时 用户必须进行身份验证 但如果他关闭页面并再次打开它 则会显示缓存的页面 我尝试将时间添
  • 减去 Pandas 中两个不平衡的 DataFrame

    我有两个不平衡的 DataFrame 并且想通过减去值来创建第三个 DataFrame 以获得它们之间的增量 这是三个数据框的示例 我想用当前值减去相应的预期值来得到 DELTA 这按预期工作 当 CURRENT 和 EXPECTED 中的
  • 使用 c# 或批处理自动使用 winrar 提取 ISO

    我正在尝试将 ISO 提取到具有相同名称但末尾没有 iso 的文件夹中 我在使用 winrar 时遇到问题 因为当我从包含 ISO 的文件夹中开始搜索时 它不会启动提取 已更新答案代码 private void ExtractISO str
  • ajax - 新选项卡中的 pdf

    我正在使用 Laravel 我在 post 方法后得到一个 PDF 并使用 Ajax 发出此请求 成功后如何在新选项卡中显示此 PDF 当我不使用 Ajax 运行代码时 它可以工作 但是当我想用 Ajax 运行它时 我不知道如何在新选项卡中
  • Excel如何在不使用VBA的情况下从逗号分隔列表中查找匹配元素的所有行

    这是我的问题 我有一个包含两列的表 产品参考和相应的通知 ID A B C D 1 Product Notice 2 p1 n1 3 p2 n2 4 p3 n3 5 6 p1 p3 edi