我正在尝试使用VBA /宏复制并粘贴一系列单元格。我需要一个代码来根据最后一行的总和选择一个单元格范围。行数可能会更改,但列将始终为9,并以“ I”结尾。
尽管第7行没有数据,但我需要仔细检查并继续(可能直到连续3个连续的0行)。我已突出显示要复制/选择的区域。
这可能不是达到结果的最佳过程,我欢迎任何帮助。我很抱歉没有包含代码,但是我不知道如何实现。
谢谢。
答案 0 :(得分:0)
此公式应为您提供I列中最后一个值的行号>0
:=LOOKUP(2,1/(I:I>0), ROW(I:I))
,您可以在VBA中使用Evaluate()
函数使用它。
Option Explicit
Public Sub FindLastValueGreaterZeroInColumnI()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet1")
Dim LastRow As Long
LastRow = ws.Evaluate("=LOOKUP(2,1/(I:I>0), ROW(I:I))")
Dim CopyRange As Range
Set CopyRange = ws.Range("A1", ws.Cells(LastRow, "I"))
Debug.Print CopyRange.Address
End Sub
然后您可以使用它来复制并粘贴您的范围。
解释此公式的工作原理:
=LOOKUP(2,1/(I:I>0), ROW(I:I))
让我们假设第一列中的以下示例数据:
{28, 28, 29, 0, 30, 30, 28, 0, 0}
I:I>0
返回一个数组True
和False
,其中对于值True
,>0
为False
,否则为{True, True, True, False, True, True, True, False, False}
,因此它返回以下数组:
True = -1
由于False = 0
和1/(I:I>0)
-1
返回#Div/0!
或错误{-1, -1, -1, #Div/0!, -1, -1, -1, #Div/0!, #Div/0!}
,因此它返回以下数组:
LOOKUP(lookup_value, lookup_vector, [result_vector])
lookup_value = 2
如果现在查找LOOKUP
,而lookup_value
函数找不到lookup_vector
,则该函数匹配{{1 }}小于或等于lookup_value
。在这种情况下,它将找到最后一个-1
。
并且由于result_vector = ROW(I:I)
将返回它的行号,即最后一个值>0
的行号。