簡體   English   中英

復制范圍,直到最后一行值等於0

[英]copy range until last row value equal 0

我正在嘗試使用VBA /宏復制和粘貼一系列單元格。 我需要一個代碼來根據最后一行的總和選擇一個單元格范圍。 行數可能會更改,但列將始終為9,並以“ I”結尾。

我的Excel工作表/示例的圖片

盡管第7行沒有數據,但我需要檢查並繼續(可能直到連續3個連續的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))
  1. 讓我們假設第一列中的以下示例數據:

     {28, 28, 29, 0, 30, 30, 28, 0, 0} 
  2. I:I>0返回一個TrueFalse數組,其中值>0則為True ,否則為False ,因此它返回以下數組:

     {True, True, True, False, True, True, True, False, False} 
  3. 因為True = -1False = 0所以1/(I:I>0)返回-1或錯誤#Div/0! ,因此它返回以下數組:

     {-1, -1, -1, #Div/0!, -1, -1, -1, #Div/0!, #Div/0!} 
  4. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM