Excel中空行之间的dynamic范围

我有一张如下所示的表格:

Date MaturityDate ZeroRate 5-May-15 5-May-15 1 5-May-15 6-May-15 0.0069999329 5-May-15 5-Jun-15 0.008996562 5-May-15 6-Jul-15 0.008993128 5-May-15 5-Aug-15 0.006744264 5-May-15 5-Nov-15 0.006912941 5-May-15 5-May-16 1 5-May-15 5-May-17 0.006910929 5-May-15 6-Nov-17 0.007017292 5-May-15 7-May-18 0.00712202 5-May-15 5-Nov-18 0.007835916 5-May-15 6-May-19 0.008551509 5-May-15 5-Nov-19 0.009734602 5-May-15 5-May-20 0.010916848 5-May-15 5-Nov-20 1 5-May-15 5-May-21 0.012632521 5-May-15 5-Nov-21 0.013504069 5-May-15 5-May-22 0.014366506 5-May-15 7-Nov-22 0.014935518 5-May-15 5-May-23 0.0154865 5-May-15 6-Nov-23 0.016059181 5-May-15 6-May-24 0.016626256 

它被分成均匀间隔的块,每个“1”之间有一排。

我有一个函数formsTestFunction(参考单元格,表格范围)。 我想“表范围”部分引用空行之间的单元格。 有没有一种方法,我可以拖动TestFunction,并让它自动select空白行之间的块范围?

我尝试编码类似的东西

 D2: =IFERROR(IF(ISBLANK(C2),TestFunction(B2, INDEX(A:A,LOOKUP(2,1/ISBLANK(C$2:C2),ROW(C$2:C2))):C2),""),"") 

但这是非常复杂的,不起作用。

有什么build议么? 谢谢。

在VBA中,有一个名为CurrentRegion属性的属性,它将所有连续的单元格返回到所选的单元格。 使用上面的示例数据,假设第一个块从单元格A3开始到单元格C8结束,调用Range("A3").CurrentRegion返回范围A3:C8 。 同样,对该组中的任何单元的调用返回相同的范围。 Range("B4").CurrentRegion返回“A3:C8”。

这能帮助你吗?

在您的function中,将表格范围=设置为总范围(rng)(包括空格)。 然后使用: NewRange = Union(rng.SpecialCells(xlCellTypeConstants), _ rng.SpecialCells(xlCellTypeFormulas)).Select来调整它NewRange = Union(rng.SpecialCells(xlCellTypeConstants), _ rng.SpecialCells(xlCellTypeFormulas)).Select

这应该给你没有空白单元格的范围

假设您使用的是Excel 2010或更高版本,并且您提供的数据位于A1:C26中,并且第1行中的标头以及第一个和最后一个非空白行分别是第3行和第26行:

INDEX(C:C,AGGREGATE(15,6,ROW(C$3:C$27)/((C$2:C$26="")*(C$3:C$27<>"")),ROWS($1:1)),):INDEX(C:C,AGGREGATE(15,6,ROW(C$2:C$26)/(C$3:C$27=""),ROWS($1:1)),)

在公式的第一次迭代中,它将返回对范围的引用:

C3:C8

并且,当向下复制到更多单元格时,将返回对该范围的引用:

C10:C17

C19:C26

等等

请注意公式中引用的故意偏移范围(C2:C26和C3:C27)。 这些应该被select为使得第一个(C2:C26)在第一个空白行开始并且在最后一个非空白行结束,并且第二个(C3:C27)从第一个非空白行开始并且以最后一个非空白行之后的第一个空白行。

问候

你可以试试这个:

创build一个看起来像这样的函数

 Public Function LastCell(ByVal target As Long) As String Dim rangeAddr As String If ActiveSheet.Cells(target, 1).Value = "" Then LastCell = "" Exit Function End If ' Get first Address If ActiveSheet.Cells(target - 1, 1).Value = "" Then rangeAddr = Range("$A" & target + 1).End(xlUp).Address Else rangeAddr = Range("$A" & target).End(xlUp).Address End If ' set the separator of range rangeAddr = rangeAddr & ":" ' Get last address of block If ActiveSheet.Cells(target + 1, 1).Value = "" Then LastCell = rangeAddr & Range("$A" & target - 1).End(xlDown).Address Else LastCell = rangeAddr & Range("$A" & target).End(xlDown).Address End If End Function 

然后在每个Dn单元格上input这个公式

 =lastcell(row()) 

并且你将在Dn单元格的每一行中得到一个代表这个特定行属于这个白色行之间的范围的文本….在你的函数中使用这个函数,并把它解决为一个范围来做你需要的任务… job我相信

希望有所帮助

试试这个数组公式:

 D2: =TestFunction(B2, INDEX(C:C,LARGE(IF(C$1:C2<>"",ROW(C$1:C2),""),1)):INDEX(C:C,ROW())) 

然后向下复制。