2016-07-22 4 views
0

各セルをステップ実行するDo While ... Loopを作成し、各セルの値が数値であるかどうかを確認します。また、最初の非番号エントリの前にいくつの番号があるかをカウントする必要があります戻り値の型にOFFSETのようなものを使用する範囲

しかし、私はセルごとにどのようなテクニックを使用するのかわかりません...これは何ですかIは、第一(これを簡略化し、カラム内の数字の任意の行までの行1から始まるがある前提とされている)しようとした:

Counter = 0 
Iteration = Worksheets("Sheet1").Range("A1") 

Do While IsNumeric(Iteration) = True And IsEmpty(Iteration) = False 
    Counter = Counter + 1 
    Iteration = Iteration.Offset(1,0) 
Loop 

オフセットしかし、これは、(1,0)を動作しない返します参照セル内の値。だから、私はOffsetに似ていますが、Range型の戻り値を必要とします。ありがとうございました!

答えて

1

範囲として反復を宣言して設定する必要があります。

、カウントは必要ありません。

Dim Iteration as Range 

Set Iteration = Worksheets("Sheet1").Range("A1") 

Do While IsNumeric(Iteration.Value) And Iteration.Value <> "" 
    Set Iteration = Iteration.Offset(1,0) 
Loop 
+0

ああ...そう範囲を返すことができますオフセットが、それは暗黙のうちにそれを数のいくつかのタイプが割り当てられ、私は明示的に型レンジとして反復宣言されていないので、 ?また、私は自分の質問を編集して、そこにいくつの数字が含まれているかをカウントする必要があるという事実を含めるようにしました。 –

+0

これは 'Worksheets(" Sheet1 ")の値を入れます。範囲(" A1 ")は繰り返しであり、数値になります。その後、オフセットは機能しませんでした。 @DavidSouth –

+0

これはトリックでした。スコットに感謝します。最後の1つの質問:私があなたの正確な答えを使用してループ内の "セット"を削除すると、プログラムはクラッシュしませんが、反復のアドレスはオフセットによって決して更新されません。どうしてこれなの? –

1
Sub checkNumber() 

    For x = 2 To Range("a65536").End(xlUp).Row 
     If IsNumeric(Range("a" & x).Value) Then 
      Range("b" & x).Value = "this is a number" 
     Else 
      Range("b" & x).Value = "this is not a number" 
     End If 
    Next x 

End Sub 
関連する問題