Excel 查找字符串,查找下一个…找到的字符串位于搜索的末尾,而不是开头

Excel 查找字符串,查找下一个…找到的字符串位于搜索的末尾,而不是开头,excel,vba,Excel,Vba,我正在使用“查找下一个字符串”并在找到该字符串时复制/粘贴相邻单元格。我需要在开始时找到第一个事件,它现在在最后,所以我需要在之后对它进行排序。有没有办法更正下面的脚本,使其在开头有第一个找到的地址 子测试() 变暗rng1、rng2、rng3作为范围 像细绳一样模糊的条纹 像绳子一样跨着 StrIn=“某物” 与工作表(1)一起使用 设置rng1=.Find(StrIn、xlValues、xlPart、xlNext) 如果不是,那么rng1什么都不是 strAdd=rng1.地址 设置rng2

我正在使用“查找下一个字符串”并在找到该字符串时复制/粘贴相邻单元格。我需要在开始时找到第一个事件,它现在在最后,所以我需要在之后对它进行排序。有没有办法更正下面的脚本,使其在开头有第一个找到的地址

子测试()
变暗rng1、rng2、rng3作为范围
像细绳一样模糊的条纹
像绳子一样跨着
StrIn=“某物”
与工作表(1)一起使用
设置rng1=.Find(StrIn、xlValues、xlPart、xlNext)
如果不是,那么rng1什么都不是
strAdd=rng1.地址
设置rng2=rng1
做
设置rng1=.FindNext(rng1)
设置rng2=Union(rng2、rng1)
非rng1时循环为Nothing,rng1.Address为空
如果结束
以
对于rng2中的每个rng3
调试.打印rng3.地址
下一个
端接头

只需交换构建工会的顺序



只需交换您构建
联盟的顺序



从最后一个单元格开始搜索

例如:


从最后一个单元格开始搜索

例如:


好吧,我用罗恩·罗森菲尔德鼓舞人心的回答解决了这个问题。我更改了SearchDirection:=xlPrevious,并保持原样:)


好的,我用罗恩·罗森菲尔德鼓舞人心的回答解决了这个问题。我更改了SearchDirection:=xlPrevious,并保持原样:)


FYI:您仅将
rng3
声明为
范围
rng1
rng2
是未分配的,因此默认为
变量
类型变量。在vbathanks Urderboy中,这是一个非常常见的“抓住机会时刻”,但它也不起作用。现在我已经按降序排序了……至少是连续排序,但仍然不是我想要的结果。我想按升序排列。仅供参考:您只声明了
rng3
作为
范围
rng1
rng2
是未分配的,因此默认为
变量
类型变量。在vbathanks Urderboy中,这是一个非常常见的“抓住机会时刻”,但它也不起作用。现在我已经按降序排序了……至少是连续排序,但仍然不是我想要的结果。我想按升序排列。
Sub test()

Dim rng1, rng2, rng3 As Range
Dim StrIn As String
Dim strAdd As String

StrIn = "something"

With Worksheets(1).UsedRange

        Set rng1 = .Find(StrIn, , xlValues, xlPart, xlNext)

        If Not rng1 Is Nothing Then
            strAdd = rng1.Address

        Set rng2 = rng1

        Do
            Set rng1 = .FindNext(rng1)
        Set rng2 = Union(rng2, rng1)

        Loop While Not rng1 Is Nothing And rng1.Address <> strAdd
    End If
End With

For Each rng3 In rng2
    Debug.Print rng3.Address
Next

End Sub
Set rng2 = Union(rng1, rng2)
With Worksheets(1).UsedRange
    Set lastCell = .Cells(.Row - 1 + .Rows.Count, .Column - 1 + .Columns.Count)
    Set rng1 = .Find(StrIn, lastCell, xlValues, xlPart, xlNext)
…
Set rng1 = .Find(what:=StrIn, LookIn:=xlValues, LookAt:=xlPart, SearchDirection:=xlPrevious)

Set rng2 = Union(rng2, rng1)