excel可以以excel逗号隔开分隔添加标签吗 ?

Posted 2023-02-23
技术标签:
【中文标题】Excel:查找所有匹配值并放在逗号分隔列表中?【英文标题】:Excel: Lookup All Matching Values and place in comma separated list?
【发布时间】:2017-06-18 01:27:45
【问题描述】:
我有一个这样的数据表:
Col A
Col B
Col C
Column D
Col E
Column F
Col G
Col H
Col
I
Col J
Col K
1234
Supplier 1
2222
Supplier 2
3333
Supplier 2
4444
Supplier 1
我还有一张纸
Home sheet:
Column B
Supplier 1
<-- Values Produced From Index Match Formula
Supplier 2
我想列出 D 列数据表中的所有项目编号,其中主页表上的供应商名称匹配。
但是,我想将所有匹配的项目编号放在一个单元格中,在一个逗号分隔的列表中,如下所示:
Home sheet:
Column B
Column C
Supplier 1
1234, 4444
Supplier 2
2222, 3333
目前我正在使用 vba 中的用户定义函数来执行此操作:
Function SingleCellExtract(LookupValue As String, LookupRange As Range, ColumnNumber As Integer, Char As String)
'Updateby20150824
Dim I As Long
Dim xRet As String
For I = 1 To LookupRange.Columns(1).Cells.Count
If LookupRange.Cells(I, 1) = LookupValue Then
If xRet = "" Then
xRet = LookupRange.Cells(I, ColumnNumber) & Char
Else
xRet = xRet & "" & LookupRange.Cells(I, ColumnNumber) & Char
End If
End If
Next
SingleCellExtract = Left(xRet, Len(xRet) - 1)
End Function
然后使用下面的公式得到结果:
=SingleCellExtract(B14,Data!F:F,-1,",")
这行得通,但是,我有 500 多行数据,这种方法需要大约 10 分钟或更长时间来计算 - 有时会导致工作表崩溃。
请有人告诉我一个更好的方法吗?
【问题讨论】:
【参考方案1】:
一个直接的改进是将数据放入一个数组中,而不是为每次检查引用单元格:
Function SingleCellExtract(LookupValue As String, LookupRange As Range, LookupCol As Long, ReturnCol As Long, Char As String)
'Updateby20150824
Dim varTMP As Variant, I As Long
varTMP = LookupRange
Dim xRet As String
For I = 1 To UBound(varTMP, 1)
If varTMP(I, LookupCol) = LookupValue Then
If xRet = "" Then
xRet = varTMP(I, ReturnCol)
Else
xRet = xRet & Char & varTMP(I, ReturnCol)
End If
End If
Next
SingleCellExtract = xRet
End Function
我还修改了您的返回线和 xRet 逻辑以避免需要 left/len。
【讨论】:
感谢您的建议,但这似乎仅适用于第一个单元格,然后导致该列下方的所有其他单元格显示#VALUE 错误
它在我的测试中运行良好,但是现有函数逻辑的一个缺陷是它期望查找列是源数据的第一列。我已经编辑了答案以拆分查找和返回列参数。这个修改后的函数在您给出的数据结构上完美运行。 (i.imgur.com/TmTea9d.png)
好吧,我不知道我在做什么不同,但它根本不适合我。它一直在说#Value。我重新启动了excel,我检查了单元格正在计算。如果它对你有用,我不确定为什么它对我不起作用。你在使用 excel 2013,如果这会有所不同,那我就在使用它。
数据表上的 D 列和 F 列之间的 E 列是否重要?
之间有 E 列就可以了。我可以假设您的公式看起来像这样吗? (当然是一个示例行范围)=SingleCellExtract(B2,Data!$D$1:$F$500,3,1,",")【参考方案2】:
我希望我的解决方案对您来说很有趣,这里是:
如果您按正在使用的两列对数据进行排序,它看起来像这样:
SupplierID
Text
1
Foo
1
Bar
1
FooBar
2
Foo
2
Bar
2
FooBar
现在只需将此公式添加到Result 列中:
=IF(A2<>A1,B2,CONCATENATE(C1,", ",B2))
这将创建像这样的输出:
SupplierID
Text
Result
1
Foo
Foo
1
Bar
Foo, Bar
1
FooBar
Foo, Bar, FooBar
2
Foo
Foo
2
Bar
Foo, Bar
2
FooBar
Foo, Bar, FooBar
最后,您可以在所有列中应用复制相同的文本。
我希望这会有所帮助!
【讨论】:以上是关于Excel:查找所有匹配值并放在逗号分隔列表中?的主要内容,如果未能解决你的问题,请参考以下文章
匹配列中的逗号分隔值
怎么把excel表格数据变成逗号分隔的形式?
单个单元格中的计数或总和(?)项目,与Excel中的列表中的条件匹配
如何使用 LINQ 查找包含 2 个逗号分隔的字符串的匹配项
Excel数据表如何查找多个值并填充数据对于的数值?
在逗号分隔的列表中查找经理

我要回帖

更多关于 如何在电子表格中标注数值区间 的文章

 

随机推荐