Использование функции FIND для возврата последнего значения в VBA

Я пытаюсь написать функцию, которая выполняет поиск по столбцу и возвращает ячейку, содержащую последнее совпадение.

Например, если у меня есть ячейка A5 в качестве активной ячейки

A1 -> Text
A2 -> wefwqef
A3 -> Text
A4 -> eorbebr

Я хотел бы выполнить поиск в массиве «Текст» и вернуть ячейку A3, поскольку это последнее совпадение.

Но если у меня есть ячейка A7 в качестве активной ячейки

A1 -> Text
A2 -> wefwqef
A3 -> Text
A4 -> eorbebr
A5 -> fhyeher
A6 -> Text

Тогда он вернет A6 как мой результат.

Я играл с функцией НАЙТИ, чтобы попытаться заставить ее работать, но я продолжаю получать ошибки (ошибка приложения или объекта).

Мой план состоит в том, чтобы выполнить этот код как часть более крупного цикла, и в каждом случае он возвращает значение, ближайшее к активной ячейке. (Надеюсь это имеет смысл)

Это код, который у меня есть до сих пор:

    Range("A19:I19").Select
    'ActiveCell.FormulaR1C1 = Sheets("Sheet1").Cells(9, 5).Value & ":5 CTs,
     O/C " & _
    'Sheets("Sheet1").Cells(9, 8).Value * 100 & "% @ " & _
    'Sheets("Sheet1").Cells(9, 9).Value & " TM"


    Dim Rng As Range

      With Sheets("Sheet1").Range(Cells(9, 3), Cells(Line, 3))

        Set Rng = .Find(What:="Primary", _
          After:=.Sheets("Sheet1").Cells(Line, 3), _
          LookIn:=xlValues, _
          LookAt:=xlPart, _
          SearchOrder:=xlByRows, _
          SearchDirection:=xlPrevious, _
          MatchCase:=False)

Я также предполагаю, что когда я смогу заставить это работать, я включу оператор DO или IF, который скажет: как только значение будет сохранено в Rng, тогда cellx = rng.

Пожалуйста помоги! Что не так с этим кодом??


person Cheves    schedule 13.08.2015    source источник
comment
Извините, если я не следовал инструкциям правильно, это было дано мне с очень коротким сроком! Я ценю любую оказанную помощь! :)   -  person Cheves    schedule 13.08.2015


Ответы (1)


Вы можете использовать массив для хранения значений, а затем перебирать массив в обратном порядке, пока не найдете нужное значение.

Sub arrayFind()
    Dim currRow As Long
    Dim wb As Workbook, ws As Worksheet, rng as Range
    Dim arrValues() As Variant
    Dim i As Long

    Set wb = ThisWorkbook
    Set ws = wb.Sheets("Sheet1")
    currRow = ActiveCell.Row
    arrValues = Range("A1:A" & currRow)

    For i = UBound(arrValues, 1) To LBound(arrValues, 1) Step -1
        If arrValues(i, 1) = "Text" Then
            set rng = Range(Cells(i, 1).Address)
            Exit For
        End If
    Next i
End Sub

Приведенное выше создает массив от Activecell до A1. Затем он ищет в столбце A (размерность 1 массива) предоставленные критерии (в данном сценарии Text) от последнего элемента массива до первого. Это позволяет ему найти критерии соответствия, ближайшие к Activecell.

person luke_t    schedule 13.08.2015