gpt4 book ai didi

vb.net - 对 XlFind 的更多控制

转载 作者:行者123 更新时间:2023-12-02 19:17:00 24 4
gpt4 key购买 nike

我正在使用一个脚本来允许用户在 Excel 工作表的列中查找序列号。然而,一个问题是搜索的灵 active 。

序列号可能会出现以下示例:“12345678      ”、“1 345678        ”、“12 345678    ”如您所见,数字后面有不同数量的空格,这会导致问题。此外,前两位(有时是单个)数字显示序列号的年份,并且可以或可以不用空格分隔。

是否有任何方法可以解释这些变化,而无需执行多次搜索或调整数据?

Private Function ExcelFind(r As Excel.Range, s As String)
Dim currentFind As Excel.Range = Nothing
currentFind = r.Find(s, ,
Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlPart,
Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, False)

If currentFind IsNot Nothing Then
Debug.Print("foundrow " & currentFind.Row)
Debug.Print("foundcol " & currentFind.Column)
Return (currentFind)
Else
Debug.Print("not found (EF1)")
Return Nothing
End If
End Function

最佳答案

好吧,使用数组进行检查的方法 - 这比使用 Maddy Nikam 的答案检查每个单元格要快得多。我对 A1:AN10000 进行了一次运行,大约花了 3 秒。仍然不是最佳的,但比逐个单元检查全范围更可行。

Sub test(r As Excel.Range, s As String)
Dim arr() As Variant
Dim cl as long
Dim rw as long

arr = r.value

cl = 1
Do While cl <= r.Columns.Count
rw = 1
Do While rw <= r.Rows.Count
arr(rw, cl) = Replace(arr(rw, cl), " ", "")
If arr(rw, cl) = s Then
Debug.Print r.Cells(rw, cl).Address
End If
rw = rw + 1
Loop
cl = cl + 1
Loop
End Sub

编辑:我假设使用这种方法,r 将是一个连续范围。如果不是,您将在地址方面遇到麻烦。例如,使用 Set rng = Union(Range("A1:A3"), Range("B5:B7")) 调用此函数,并将 rng 传递给 r Debug.Print 唯一找到的地址将是 A1:A3,而 Debug.Print(rng.Address) 会告诉您 $A$1: $A$3,$B$5:$B$7

关于vb.net - 对 XlFind 的更多控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44628697/

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