如何在逗号分隔的列表中找到第n项

2017-02-01

VBA

假设你有一列数据在每个单元格中有一个文本字符串由逗号分隔的项目列表.类似于下面的表格。

step -001-How-To Find The n- Item-In A Comma-Separated-List

你怎么能得到第n项从这个列表吗?一个解决办法是使用文本到列把每个列表分成不同的列,然后用指数函数在这些列。问题是,在这个过程中,你已经销毁了原始列表,现在它跨越了许多不同的列。一个更简单的解决方案可能是创建一个用户定义函数在VBA中。

函数INDEXLIST(strList As String, strSeparator As String, lngIndex As Long) As String Dim ListArray() As String ListArray() = Split(strList, strSeparator) INDEXLIST = ListArray(lngIndex - 1)结束

这段代码利用了visual basic分裂函数来为我们执行“重列表”,将列表分隔为一个数组,然后我们需要做的就是调用n数组元素

语法

INDEXLIST (列表、分离器、索引

  • 列表(required) -这是分隔项的列表。
  • 分隔符(required) -这是用于分隔列表中的项目的分隔符。
  • 指数(required) -这是您想要返回的项目索引号。

有了这个代码,我们就可以这个公式列表中的第n项

”、“= INDEXLIST (B3, C3)

您现在的位置是:虫网下载站>资源下载> dsp编程> step 002-How To Find The Nth-Item In A Comma-Separated-List

需要注意的事情INDEXLIST函数。

  • 如果输入的索引数大于列表中的数或项,或者小于列表中的项数,函数将返回a#价值!错误。
  • 如果我们使用一个非整数,函数将四舍五入到最接近的整数并从列表中返回该项。

一个公式解决方案

使用Excel的内置公式可以获得列表中的第n项,但我找到的解决方案显然没有这么优雅。

  • 使用替代函数将分隔符","替换为可能不会在列表中的任何项中使用的字符,CHAR (1)应该不太可能出现在任何数据中。现在我们可以用找到函数来找到这个的位置CHAR (1)的性格。在分隔符“,”第n次出现时重复此逻辑。
  • 使用IFERROR当N太大或太小时。
  • 使用LEN中期函数返回分隔符之间的文本。

IFERROR =替代(中期(B3(找到(CHAR(1)替代品(B3,”、“CHAR (1) C3-1)), 1), IFERROR(找到(CHAR(1)替代品(B3,”、“CHAR (1), C3)), LEN (B3) + 1) -IFERROR(找到(CHAR(1)替代品(B3,”、“CHAR (1) C3-1)), 1 )),", ","")

这肯定不漂亮,但很管用。

关于作者

约翰MacDougall

约翰MacDougall

John是微软MVP和自由顾问和培训师,擅长Excel, Power BI, Power automation, Power Apps和SharePoint。你可以在约翰的博客或YouTube频道上找到其他有趣的文章。

订阅

广告

相关文章

评论

2的评论

  1. Nilanjan

    很好的方法。但是有一个很小的限制,即如果分隔符上的空间比定义的多或少,则会抛出错误。为了解决这个问题,我添加了TRIM函数并删除了空格和逗号作为分隔符。

    INDEXLIST(修剪([@ list ]),”,”,[@[ 项目编号]])
    INDEXLIST(修剪(B3)”、“,C3)

    回复
    • 约翰

      谢谢你的提示!

      回复

提交评论

您的电子邮件地址将不会被公布。必填字段已标记

这个网站使用Akismet来减少垃圾邮件。了解如何处理您的评论数据

获取最新消息

关注我们

在社交媒体上关注我们,了解Excel中的最新技巧!

把它钉在Pinterest上

分享这