返回最后一个值

Posted 熬肥妖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了返回最后一个值相关的知识,希望对你有一定的参考价值。

问题:A列返回同行最后一个有数据的值

 

 

 函数公式解决:

=LOOKUP(99^9,B2:M2)

利用二分法查找原理,查找一个比数据中最大值还要大的值,可以返回最后一个值。

也可以使用以下公式,如果一行中没有数据,就不需要再外套函数,可以直接销错。

=XLOOKUP(99^9,B2:M2,B2:M2,"查无此数",-1,2)

返回表列中的最后一个值

VBA新手。一直在寻找答案两天没有找到真正问我想要答案的问题。

我正在使用一个UserForm来填充我的一张表中的表。

我的问题在Sub UserForm_Initialize()内。我要做的第一件事就是找出我所在表的DataBodyRange中的最后一行(顺便说一下,第一列)是否包含一个ID号。

如果是,那么我将获取该值,添加一个,并在UserForm中填充一个文本框。

但是,如果表由标题和一个空行组成,我想用数字1填充TextBox(通过另一个sub将添加到此空行),但我的代码停止处理错误。

使用以下代码我得到错误

运行时错误'91':对象变量或未设置块变量

Private Sub UserForm_Initialize()
Dim tbl As ListObject, rng As Range

Set tbl = Worksheets("Sheet1").ListObjects("table1")
Set rng = tbl.ListColumns("ID").DataBodyRange

If IsEmpty(rng.Cells.Find("*", LookIn:=xlValues,_
           SearchOrder:=xlByRows,_
           SearchDirection:=xlPrevious).Value) Then
    Me.textBox.Value = 1
Else
    Me.textBox.Value = rng.Cells.Find("*", LookIn:=xlValues,_
           SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Value + 1
End If

End Sub

我不明白我找到的有关错误代码或如何解决它的解释。我认为这个故障与rng.Cells.Find...有关,因为当踩到代码时出现错误,但是我可以为我的生活不明白为什么。

答案

Find()返回一个Range,如果没有找到,则Range为Nothing。因此,应该对Is Is Nothing进行检查。

在下面的代码中,引入了一个新的范围变量result。它被检查是什么:

Private Sub UserForm_Initialize()
    Dim tbl As ListObject, rng As Range

    Set tbl = Worksheets("Sheet1").ListObjects("table1")
    Set rng = tbl.ListColumns("ID").DataBodyRange

    Dim result As Range
    Set result = rng.Cells.Find("*", LookIn:=xlValues, _ 
                  SearchOrder:=xlByRows, SearchDirection:=xlPrevious)

    If Not result Is Nothing Then
        Debug.Print result.Address
    Else
        Debug.Print "result is nothing"
    End If

End Sub
另一答案

它因为失败而失败

rng.Cells.Find("*", LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Value

如果Range.Find method没有找到任何东西它返回Nothing然后你试图得到.ValueNothing失败。

在使用Find之前,请务必测试Nothing的结果:

Dim FoundAt As Range
Set FoundAt = rng.Cells.Find("*", LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlPrevious)

If Not FoundAt Is Nothing Then
    Debug.Print FoundAt.Value 'now you can safely use .Value
Else
    MsgBox "Nothing found"
End If 
另一答案

仅供参考,您不需要Find,因为您可以直接获取最后一个单元格:

Private Sub UserForm_Initialize()
    Dim tbl As ListObject, rng As Range, lastCell As Range

    Set tbl = Worksheets("Sheet1").ListObjects("table1")
    Set rng = tbl.ListColumns("ID").DataBodyRange
    With rng
        Set lastCell = .Cells(.Cells.Count)
    End With
    If IsEmpty(lastCell) Then
        Me.TextBox.Value = 1
    Else
        Me.TextBox.Value = lastCell.Value + 1
    End If

End Sub

以上是关于返回最后一个值的主要内容,如果未能解决你的问题,请参考以下文章

c# 多播委托的 异常处理 如果有返回值 只返回最后一个返回值

原型 - each() 中的函数 - 只返回最后一个值

python 生成器存储返回的最后一个值

s-s-rS 多值参数只返回最后一个值

Flask-Socketio 会话返回最后一个值

使用 CockroachDB 返回最后插入的 ID/SERIAL 值