跳转到显示数据的最后一行公式

跳转到显示数据的最后一行公式

我在工作表上创建了一个模板,该模板仅从数据源工作表中提取数据。因此,第 9-10,000 行上有公式,我已关闭显示 0 的选项,这样我就只能看到源工作表上有多少数据。

我正在尝试创建一个宏,使其跳转到显示数据的底行(例如,第 2,500 行),但由于下面几行中的公式没有显示结果,因此它会跳转到第 10,000 行。

我怎样才能让它忽略所有空白公式行并只停在显示数据的最后一行?

答案1

Sub FindLastRowWithData

dim i as integer
dim bFound as boolean
dim iColumn as integer
dim ws as worksheet
dim iFoundRow as integer

set ws as ActiveSheet
bFound = false

'set which column to test
iColumn = 1

for i = [lastrow]* to 2
    if not bFound then
        if not ws.cells(i,iColumn).value = "" then
            bFound = true
            iFoundRow = i
        end if
    end if
next i

msgbox "your last row where the formula shows a result is " & i

end sub

请注意,我没有测试运行此代码,因为我是在记事本中编写的,但它应该可以帮助您找到包含公式显示结果的最后一行。

'* 我让你自己决定实际的最后一行是什么。如果你知道,你可以在这里进行硬编码;如果可能会有所不同,这个堆栈中或在 SO 上有 100 个关于如何在 Excel VBA 中找到最后使用的行的问答。

答案2

这是一个跳转到第一列中最后一个非零单元格的简单代码:

Sub JumpToLastValue()
    Dim LastRow As Long
    
    LastRow = Application.Evaluate("=MAX(FILTER(ROW(A:A),A:A>0))")
    ActiveSheet.Cells(LastRow, 1).Activate
End Sub

(仅适用于 Excel365)

在此处输入图片描述

答案3

比测试每一行更快的方法是使用 GoTo,据推测 VBA 可以做到这一点。

这假设您至少有一列(听起来像多列,但至少有一列)只包含某个点的数据,比如第 2500 行,如您的帖子中所示,然后公式就是该点以下的全部内容。

选择可能已知包含数据的列的开头(Excel 将其标记为“常量”)。然后使用 GoTo 查找公式。如上所述,只要您在数据/公式区域中选择了该列的第一个单元格,这必然是数据后面的第一个公式。然后,也必然是正上方的单元格是最后一个数据单元格。

具体示例:假设 A 列包含从单元格 A9 到 A10000 的公式。一段时间内,数据逐行替换了这些公式,现在列中第一个包含公式的单元格是单元格 A2501。其上方的所有单元格都有数据(“常量”)。请注意,这可能与其他列不同,因为某些公式可能在其中有用。但是您的宏仅选择 A 列,然后选择其中的第一个候选单元格(A9),并使用 GoTo 查找其中的第一个公式。即单元格 A2501。然后,它将上方的单元格(A2500)报告为最后一个包含数据的单元格,因此也是最后一行包含数据。它最终可以为您跳转到该行。

两种可能的其他方法是逐行测试(希望是“单元格”,而不是整行,但是......根据需要)直到找到公式并报告正上方行的单元格。

当区域数据超过 50% 时,一种更快的替代方法是从下往上进行搜索。

也可以让它在单元格中搜索应该在可找到的公式中的特定字符串。这可能必须是动态的。

当然,人们可以搜索单元格属性,直到找到公式,然后选择上面的行。

这些都不可能这么快。现代计算机?谁知道呢,您可能甚至没有注意到差异,但使用内置搜索功能查找单个内容似乎要快得多。(我说的“内置”是指 Excel 和 VBA 的现成编程例程,而不是您必须开发的搜索例程。大概他们的程序更快,因为经过精心设计和实施,而您的程序是临时的,可能没有针对任务进行优化。更不用说他们可以访问(想象的,但仍然……可能)可以大大加快此类搜索速度的内部索引。)

相关内容