我想选择所选单元格上方的第一行非空白(减去偏移量)。例如,如果在工作表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
答案 0 :(得分:1)
我不确定我是否理解您的代码,但是我认为您正在寻找类似的内容:
...
...
If Not Rng Is Nothing Then
Do While Rng.Row > 1 And Rng.Offset(-1, 0).Value <> ""
Set Rng = Rng.Offset(-1, 0)
Loop
...
一旦找到该单元格,它将一直向上进行,直到找到一个空单元格并在此之前停止。
答案 1 :(得分:0)
这将找到所选单元格上方的第一个非空白单元格(表示行不为空白)。
您需要检查:
正如您所说的第一个非空白单元格,它使用*
通配符进行搜索,并使其从使用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
答案 2 :(得分:0)
我根据@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