[英]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.