Найти строку, найти следующую ... найденная строка находится в конце поиска, а не в начале - PullRequest
0 голосов
/ 28 февраля 2020

Я использую поиск следующей строки и копирование / вставка соседних ячеек, когда строка найдена. Мне нужно, чтобы первый обнаруженный случай был в начале, в настоящее время он находится в самом конце, поэтому мне нужно отсортировать его позже. Есть ли способ исправить сценарий ниже, чтобы первый найденный адрес был в начале? example

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

Ответы [ 3 ]

1 голос
/ 28 февраля 2020

Начните поиск с последней ячейки.

Например:

With Worksheets(1).UsedRange
    Set lastCell = .Cells(.Row - 1 + .Rows.Count, .Column - 1 + .Columns.Count)
    Set rng1 = .Find(StrIn, lastCell, xlValues, xlPart, xlNext)
…
1 голос
/ 28 февраля 2020

Просто поменяйте порядок, в котором вы строите свой Union


Set rng2 = Union(rng1, rng2)
0 голосов
/ 29 февраля 2020

Хорошо, я решил это с вдохновляющим ответом Рона Розенфельда. Я изменил SearchDirection: = xlPrevious и оставил все как есть:)

Set rng1 = .Find(what:=StrIn, LookIn:=xlValues, LookAt:=xlPart, SearchDirection:=xlPrevious)

Set rng2 = Union(rng2, rng1)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...