[英]copy range until last row value equal 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
数组,其中值>0
则为True
,否则为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
中小于或等于lookup_value
。 在这种情况下,它将找到最后一个-1
。 并且由于result_vector = ROW(I:I)
,它将返回其行号,即最后一个值>0
的行号。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.