2017-05-03 1 views
0

問題:For currentRow = 25 To rowCountの後、残りのfor文は何も原因でスキップされ続けます。VBAでループが発生しないために

私は他の2つのForステートメントがこの問題のあるコードブロックの前にあり、それらのフォーマットはこれと同じで、両方ともうまくいきます。

Public Sub WeightB() 
    Dim sourceCol As Integer, rowCount As Integer, currentRow As Integer 
    Dim currentRowValue As String 

    sourceCol = 7 
    rowCount = Cells(Rows.Count, sourceCol).End(xlUp).Row 

    For currentRow = 24 To rowCount 
     currentRowValue = Cells(currentRow, sourceCol).Value 
     If IsEmpty(currentRowValue) Or currentRowValue = "" Then 
      Cells(currentRow, sourceCol).Select 
      Exit For 
     End If 
    Next 
End Sub 

私はFor loops being skipped without cause in VBAを参照しましたが、まだこれを理解できませんでした。

+1

'For'ループの直前の' rowCount'の値は何ですか? – Bathsheba

+1

行の数は「整数」ではなく「Long」型でなければなりません。また、セルを完全に修飾する必要があります。[VBAベストプラクティス - ワークシートを想定しない](http://stackoverflow.com/documentation/excel-vba/1107/vba-best-practices/9218/never-assume-the-worksheet #t = 201704280559226199101)。 –

+0

私はMsgBoxのrowCountを試してみましたが、それは22です。 –

答えて

2

、あなたの明確化コメントのとおり、22あるrowCount場合は、あなたのForループが

場合は24が22まで数えることができる方法がないよう、明らかに何もしません

For currentRow = 24 To 22

なりあなたは、あなたが

For currentRow = 24 To rowCount Step Iif(rowCount - 24 < 0, -1, +1) 

のようなものを使用することができ、最終的な数の方向にカウントする必要があるが、これは、あなたが何をしたいのか本当に?また、行番号と列番号にはLongタイプを使用し始めます。ワークシートの行数が32767を超えるようになり、すべてのモジュールの先頭にOption Explicitを使用すると、迷惑な自然発生変数の作成が不要になります。

+0

これは意図的なものだが、24から22(24,23,22)にしたい場合は、OPは 'For currentRow = 22 To 24 Step -1'を使用する必要があります – Wolfie

+0

これは私が2番目に行ったことですパート、イニシャル。 – Bathsheba

+0

私はあなたに間違って答えたかもしれません。私がしようとしているのは、D24からD42までのデータを入力することです。しかし、私はこのスクリプトがその範囲内の空のセルを見つけて入力を欲しいと思っています。 –

関連する問題