从每个第n个单元格创build一个范围

我正在尝试创build一个函数,返回范围的每个第n个单元格作为parameter passing给它的范围。

Function OFFSETRANGE(AREA As Range, Optional STEP As Integer = 1) As Range Dim Counter As Integer Dim TempRange As Range For Each rCell In AREA.Cells If Counter Mod Counter = 0 Then MsgBox ("In loop" & Counter & " " & rCell) TempRange = Application.Union(TempRange, rCell) End If Next OFFSETRANGE = TempRange End Function 

每当我尝试使用该函数时,我都会收到#VALUE错误。 我究竟做错了什么

 Function OFFSETRANGE(AREA As Range, Optional theStep As Integer = 1) As Range Dim Counter As Long Dim TempRange As Range, rCell As Range For Each rCell In AREA.Cells Counter = Counter + 1 If Counter Mod theStep = 0 Then Debug.Print "In loop" & Counter & " " & rCell 'check if we can use Union or not here If TempRange Is Nothing Then Set TempRange = rCell Else Set TempRange = Application.Union(TempRange, rCell) End If End If Next Set OFFSETRANGE = TempRange End Function 

不知道你在这里做什么

If Counter Mod Counter = 0 Then

Counter没有一个值,因此抛出一个值的错误。

一些事情看起来不正确。

1)你的“counter”整数没有设置,因为你正在做一个mod值,它总是等于0,即使它有一个值。 也许你的意思是反制Mod步骤? 在下面的示例中,我设置了counter = 2,但显然可以改变。

2)工会将首先努力失败。 如果没有,最好的方法就是使用if语句。 我在下面包含一个示例。

 Function OFFSETRANGE(AREA As Range, Optional STEP As Integer = 1) As Range Dim Counter As Integer: Counter = 2 Dim TempRange As Range, rCell As Range For Each rCell In AREA.Cells If Counter Mod STEP = 0 Then MsgBox ("In loop" & Counter & " " & rCell) If TempRange Is Nothing Then Set TempRange = rCell Else Set TempRange = Union(TempRange, rCell) End If End If Next Set OFFSETRANGE = TempRange End Function