Найти первую непустую строку над выбранной ячейкой - PullRequest
0 голосов
/ 05 сентября 2018

Я бы хотел выбрать первую непустую строку над выбранной ячейкой (минус смещение). Например, если найти Machine 1 в листе Grupos Produção, я хочу вернуть строку ******* Grupo 1 *******.

********** Grupo  1  ********** 
    Machine 1
    Machine 2

Пока у меня есть следующее, но оно не возвращает то, что мне нужно.

    Dim FindString As String
    Dim Rng As Range
    FindString = Lcell.Value
    If Trim(FindString) <> "" Then
        With Sheets("Grupos Produção").Range("A:Z")
            Set Rng = .Find(What:=FindString, _
                            After:=.Cells(.Cells.Count), _
                            LookIn:=xlValues, _
                            LookAt:=xlWhole, _
                            SearchOrder:=xlByRows, _
                            SearchDirection:=xlNext, _
                            MatchCase:=False)
            If Not Rng Is Nothing Then
                Application.Goto Rng, True
                upperRow = .Cells(Rng.Row, Rng.Column - 1).End(xlDown).Row
            Else
                MsgBox "Nothing found"
            End If
        End With
    End If

Ответы [ 3 ]

0 голосов
/ 05 сентября 2018

Я не уверен, что понимаю ваш код, но я думаю, что вы ищете что-то вроде этого:

...
...
If Not Rng Is Nothing Then
    Do While Rng.Row > 1 And Rng.Offset(-1, 0).Value <> ""
        Set Rng = Rng.Offset(-1, 0)
    Loop
...

Как только ячейка найдена, она движется вверх, пока не найдет пустую ячейку и не остановится прямо перед ней.

0 голосов
/ 05 сентября 2018

Мне удалось получить то, что мне нужно, на основании ответа @Sam

    If Not Rng Is Nothing Then
                    Do While Rng.Row > 1 And Rng.Offset(-1, 0).Value <> ""
                        Set Rng = Rng.Offset(-1, 0)
                    Loop
                    grupo = Rng.Offset(-1, -1).Value
                    Lcell.Value = grupo
                End If
0 голосов
/ 05 сентября 2018

При этом будет найдена первая непустая ячейка (которая будет указывать, что строка не пустая) над выбранной ячейкой.

Вам необходимо проверить:

  • Если остальная часть листа пуста, он вернет тот же адрес, что и выбранный вами.
  • Если все ячейки над выделением пусты, он будет начинаться с нижней части листа, пока не достигнет вашего выделения снова.

Как вы сказали, в первой непустой ячейке для подстановки используется подстановочный знак *, чтобы вывести его из списка, который используется xlPrevious.

Еще нужно проверить, является ли rng ничем, если весь лист пуст.

Sub Test()

    Dim Rng As Range

    With ThisWorkbook.Worksheets("Sheet1").Range("A:Z")
        Set Rng = .Cells.Find(What:="*", _
                              After:=Selection, _
                              LookIn:=xlValues, _
                              LookAt:=xlWhole, _
                              SearchOrder:=xlByRows, _
                              SearchDirection:=xlPrevious)

        If Not Rng Is Nothing Then
            If Rng.Address = Selection.Address Or Rng.Row > Selection.Row Then
                MsgBox "Nothing found"
            Else
                Rng.Select
            End If
        End If

    End With

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