Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 查找选定单元格上方的第一个非空行_Vba - Fatal编程技术网

Vba 查找选定单元格上方的第一个非空行

Vba 查找选定单元格上方的第一个非空行,vba,Vba,我想选择所选单元格上方的第一个非空行(减去偏移量)。例如,如果在工作表Grupos Produção中查找Machine 1,我想返回*******Grupo 1*********字符串 ********** Grupo 1 ********** Machine 1 Machine 2 到目前为止,我有以下内容,但它没有返回我需要的内容 Dim FindString As String Dim Rng As Range FindString = L

我想选择所选单元格上方的第一个非空行(减去偏移量)。例如,如果在工作表
Grupos Produção
中查找
Machine 1
,我想返回
*******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
Dim FindString作为字符串
变暗Rng As范围
FindString=Lcell.Value
如果修剪(FindString)“,则
带有板材(“Grupos Produção”)。范围(“A:Z”)
Set Rng=.Find(What:=FindString_
之后:=.Cells(.Cells.Count)_
LookIn:=xlValues_
看:=xlother_
搜索顺序:=xlByRows_
SearchDirection:=xlNext_
匹配案例:=假)
如果不是,那么Rng什么都不是
应用程序。转到Rng,对
upperRow=.Cells(Rng.Row,Rng.Column-1).End(xlDown).Row
其他的
MsgBox“未找到任何内容”
如果结束
以
如果结束

这将在所选单元格上方找到第一个非空单元格(表示该行不为空)

您需要检查:

  • 如果工作表的其余部分为空,它将返回与所选内容相同的地址
  • 如果所选内容上方的所有单元格均为空,则它将从工作表底部开始,直到再次到达所选内容
正如您所说,第一个非空白单元格使用
*
通配符进行搜索,并使其从使用
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

我不确定我是否理解您的代码,但我认为您正在寻找以下内容:

...
...
If Not Rng Is Nothing Then
    Do While Rng.Row > 1 And Rng.Offset(-1, 0).Value <> ""
        Set Rng = Rng.Offset(-1, 0)
    Loop
...
。。。
...
如果不是,那么Rng什么都不是
当Rng.Row>1和Rng.Offset(-1,0)时执行。值“”
设置Rng=Rng偏移(-1,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
如果不是Rng什么都不是,那么
当Rng.Row>1和Rng.Offset(-1,0)时执行。值“”
设置Rng=Rng偏移(-1,0)
环
grupo=Rng.偏移量(-1,-1).值
Lcell.Value=grupo
如果结束

您能将@Sams answer勾选为已接受的答案吗?对不起,我很乐意这样做,但@Sam的答案不能解决这个问题。