gpt4 book ai didi

excel - 将匹配限制为三个而不是无限

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

我正在使用脚本根据另一列(图像文件名,其中包含项目#)匹配一列(项目#)。我将匹配的结果放在中间一列,每个匹配由 ; 分隔分隔符。

Sub Adrift()
Dim NA As Long, NC As Long, v As String, I As Long, J As Long
Dim v2 As String
NA = Cells(Rows.Count, "A").End(xlUp).Row
NC = Cells(Rows.Count, "C").End(xlUp).Row
For I = 2 To NA
v = Cells(I, "A").Value
v2 = ""
For J = 2 To NC
If InStr(Cells(J, "C").Value, v) > 0 Then
v2 = v2 & "," & Cells(J, "C").Value
End If
Next J
Cells(I, "A").Offset(0, 1).Value = Mid(v2,2)
Next I
End Sub

我每个项目最多有 30 张图像 # 并且希望将此脚本限制为 3 或 4 个匹配项。

编辑:

假设我们有一个工作表,例如:

enter image description here

上面的脚本扫描 A 列(AMH4613A、AMH5706B 等),然后根据 A 列的值扫描 C 列(注意图像使 C 列看起来是 B 列)。如果存在匹配项(或来自A 列出现在 C 列值的某些部分) C 列中的文件名或值与 B 列中的匹配项 # 相邻​​放置。

备注 C列很长,它是一个目录中所有图像的列表。 A 列(项目编号)大约有 1000 行长,而 C 列大约有 5000 行。所以平均每个项目大约有 5 张图像,但并非总是如此。

输出如下:

enter image description here

最佳答案

我可能会用 finds 做这样的事情 - 也应该让它更快。

Sub Adrift()
Dim NA As Long, NC As Long, I As Long
Dim Finder As Range, FAdd As String, Count As Integer
NA = Cells(Rows.Count, "A").End(xlUp).Row
NC = Cells(Rows.Count, "C").End(xlUp).Row
For I = 2 To NA
Count = 0: Cells(I, "B").Value = ""
Set Finder = Range("C1:C" & NC).Find(Cells(I, "A").Value, LookAt:=xlPart)
If Not Finder Is Nothing Then
FAdd = Finder.Address
Do
Cells(I, "B").Value = Cells(I, "B").Value & "," & Finder.Value
Count = Count + 1
Set Finder = Range("C1:C" & NC).FindNext(Finder)
Loop While Finder.Address <> FAdd And Count < 3
Cells(I, "B").Value = Mid(Cells(I, "B").Value, 2)
End If
Next I
End Sub

您可能会丢失 count 变量而只计算字符串中的逗号 - 您可以将其存储为字符串而不是将其反复放入单元格中 - 如果速度是一个问题,它也可能会使其更快。

当然,变体数组通常比查找更快,尽管 IMO 它是查找的一个不错的用例。

关于excel - 将匹配限制为三个而不是无限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58543391/

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