VBA如何查找上一个非空单元格

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VBA如何查找上一个非空单元格相关的知识,希望对你有一定的参考价值。

以此图为例。如果我当前定位在A8单元格的时候,我希望能查到上一个非空单元格的行号,也就是“4” ,当我定位在A11单元格的时候,我希望能查到上一个非空单元格的行号,也就是“8” 用VBA如何实现?

答:

Sub demo()
    Dim FindRng As Range
    Dim C As Range
    Dim FirstAddress As String
   
    Set FindRng = Range("A:A")
    With FindRng
        Set C = .Find(what:="*", lookat:=xlPart)
        If Not C Is Nothing Then
            FirstAddress = C.Address
            Do
                C.Select
                MsgBox "当前选定单元格:" & C.Address & vbCrLf & "上一个非空单元格行号:" & .FindPrevious(C).Row            
                Set C = .FindNext(C)
            Loop While Not C Is Nothing And C.Address <> FirstAddress
        End If
    End With
End Sub

追问

代码完全实现了我的问题。但是,这个代码以我的水平还看不太明白。所以我也没办法用到我自己的代码里面去。
我想再追问一下。如果当前单元格A8是以知条件。 如何用当前单元格A8的位置找到A 4 ? 也就是说,您不需要用循环语句,您就写一条代码通过A8来找上一个单元格的位置。 非常感谢。

追答

MsgBox ActiveSheet.UsedRange.FindPrevious(Range("A8")).Row

参考技术A Private Sub Worksheet_SelectionChange(ByVal T As Range)
Dim r&
If T.Column = 1 Then
For r = T.Row - 1 To 1 Step -1
If Cells(r, 1) <> "" Then
MsgBox r
Exit Sub
End If
Next
End If
End Sub

跨多个工作表查找最后一个非空单元格

【中文标题】跨多个工作表查找最后一个非空单元格【英文标题】:Finding the last non-empty cell across multiple sheets 【发布时间】:2013-02-23 23:08:26 【问题描述】:

我想编写一个公式,查看其他工作表中特定单元格的值并返回最后一个非空值。

例如,如果:

Sheet2.B5 = 3 Sheet3.B5 = "" Sheet4.B5 = 6 Sheet5.B5 = 4 Sheet6.B5 = ""

那么我希望公式返回 4。

非常感谢任何帮助,我已经为此工作了一段时间但没有成功。

【问题讨论】:

工作表集是否不变?或者它是否需要处理任意数量的工作表?它必须查看工作簿(文件)的所有工作表还是仅查看一些工作表? 如果它可以查看右侧的所有工作表,那就太好了,但我计划每次添加新工作表时只更新公式。 【参考方案1】:

这会返回所需的结果,尽管它不是复杂的或自动的:

=if(not(isblank(Sheet6.B5)), Sheet6.B5,
    if(not(isblank(Sheet5.B5)), Sheet5.B5,
       if(not(isblank(Sheet4.B5)), Sheet4.B5,
          if(not(isblank(Sheet3.B5)), Sheet3.B5,
             if(not(isblank(Sheet2.B5)), Sheet2.B5,
                "")))))

它开始查看最后一个 Sheet6.B5:如果它不是空白的,那就是要取的值,否则查看 Sheet5.B5:如果它不是空白......等等。最后如果都是空白,返回空白。

【讨论】:

以上是关于VBA如何查找上一个非空单元格的主要内容,如果未能解决你的问题,请参考以下文章

求vba模块,excel把所有日期单元格转换为yyyy-mm-dd文本

在excel中用VBA如何实现对非空单元格行数的统计。

如何查找范围是不是包含VBA中的合并单元格

在EXCEL中 如何用VBA查找某特定单元格并返回该单元格的行和列值?

VBA怎样取到查找到的单元格位置

如何查找一行数据中倒数第二个非空单元格的内容呢?