gpt4 book ai didi

excel - 在Excel中,如何创建两个字符串的 "intersection"(无需放入VB)?

转载 作者:行者123 更新时间:2023-12-02 22:10:13 25 4
gpt4 key购买 nike

在 Mac Excel 2011 中,我有两个字符串,每个字符串都由较小的无空格字符串的空格分隔串联组成。例如:

“红绿蓝粉红”“马苹果红猴粉”

从中,我想提取交集字符串:

“红粉色”

我可以在 VB 中完成此操作,但我更愿意留在 Excel 中。现在我知道我可以通过假设每个较大字符串中较小组件字符串的数量来将一些东西组合在一起(在 Excel 中)。然后,我可以将其中一个较大的字符串切入这些组件,然后对每个组件对第二个大字符串执行 FIND(),同时连接结果。

问题是,虽然这里我只给出了两个字符串,但实际上我有两组字符串,每组包含 20 个大字符串。因此,就 Excel 中的空间而言,“砍走”方法感觉就像 O(N^2),我正在寻找一种更简单的方法。

有什么想法吗?

最佳答案

我认为如果不使用多个单元或 VBA,您无法在单单元函数中完成此操作。定义如下 UDF,并使用语法

在一个单元格中使用新函数
=StringIntersect("a b c","d e b f")

这将返回“b”

这个函数确实有嵌套循环,但在字符串数组上我想它会足够快

Function StringIntersect(s1 As String, s2 As String) As String
Dim arys1() As String
Dim arys2() As String
Dim arysub() As String
Dim i as integer
Dim j as integer

arys1 = Split(s1, " ")
arys2 = Split(s2, " ")
For i = LBound(arys1) To UBound(arys1)
For j = LBound(arys2) To UBound(arys2)
If arys1(i) = arys2(j) Then StringIntersect = StringIntersect & arys1(i) & " "
Next
Next
StringIntersect = Trim(StringIntersect) 'remove trailing space
End Function

如果您不想对两个循环执行操作,您应该可以使用 inStr 执行一些操作,这非常快。我没有做过任何速度测试,但我怀疑下面的函数更快,但是如果字符串在第一个输入中重复,或者第一个输入中的字符串是第二个输入中的子字符串,您会得到意想不到的结果。通过更多检查可以避免这种情况,但您可能会失去速度优势。

Function StringIntersect(s1 As String, s2 As String) As String
Dim arys1() As String

arys1 = Split(s1, " ")
For i = LBound(arys1) To UBound(arys1)
If InStr(1, s2, arys1(i), vbBinaryCompare) > 0 Then StringIntersect = StringIntersect & arys1(i) & " "
Next
StringIntersect = Trim(StringIntersect) 'remove trailing space

End Function

关于excel - 在Excel中,如何创建两个字符串的 "intersection"(无需放入VB)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12546189/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com