2017-10-20 8 views
0

引数として渡された範囲のn番目のセルからなる範囲を返す関数を作成しようとしています。各n番目のセルから範囲を作成する

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エラーが発生します。私はあなたがここに

If Counter Mod Counter = 0 Then

しかし、このように値の誤差を投げ値をCounter持っていませんが何をしようとしてわからない間違った

+0

あなたは 'Counter'の値が何であるかをどこかにあなたのコード内で宣言していましたか? 'Area.Cells'の各セルを' Debug.Print'するだけで、それぞれのセルにデータがあることを確認します。 – hod

+0

空のRange(Nothing)でUnionを使うことはできず、あなたは 'Counter'をインクリメントしていません。ワークシートからではなくVBAのSubから呼び出すことによって、関数をデバッグします。 –

+0

どのように機能を使用していますか? – jsotola

答えて

0

何をやっています。

0

カップルのことが正しくないように見えます。

1)あなたの "カウンター"整数は設定されておらず、あなた自身がmod値を行っているので、値があっても常に0になります。おそらくあなたはCounter 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 
2
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 
関連する問題