复制范围直到最后一行值等于 0
Posted
技术标签:
【中文标题】复制范围直到最后一行值等于 0【英文标题】:copy range until last row value equal 0 【发布时间】:2018-07-10 07:31:26 【问题描述】:我正在尝试使用 VBA/Macro 复制和粘贴一系列单元格。我需要一个代码来根据最后一行的总和选择一系列单元格。行数可能会发生变化,但列将始终为 9 并以“I”结尾。
虽然第 7 行没有数据,但我需要查看过去并继续(可能直到 3 行连续的 0)。我已经突出显示了我要复制/选择的区域。
这可能不是实现结果的最佳过程,我欢迎任何和所有帮助。我很抱歉没有包含代码,但我不知道如何实现这一点。
谢谢。
【问题讨论】:
【参考方案1】:此公式应为您提供 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
中小于或等于@ 的最大值987654345@。在这种情况下,它将找到最后一个-1
。
因为result_vector = ROW(I:I)
会返回它的行号,也就是最后一个值>0
的行号。
【讨论】:
谢谢你,使用它我设法得到了我需要的东西。非常感谢您的帮助。以上是关于复制范围直到最后一行值等于 0的主要内容,如果未能解决你的问题,请参考以下文章