繁体   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