2017-08-04 7 views
0

私は、複数の日付範囲から日付のリストを生成し、その日付を隣接するセルに一致させるコードを作成しようとしています。VBA - ループ内の空のセルをスキップするにはどうすればよいですか?

私はこのプロセスを自動化しようとしているので、生データには日付範囲の間に空の行があります。だから問題は、ループの空の行をスキップするコードを取得するにはどうすればいいですか?

これは私がこれまで持っているものです。

Sub Dates() 

Dim dStart As Date 
Dim dEnd As Date 
Dim dDate As Date 
Dim iCol As Integer 
Dim iColDate As Integer 

iCol = 6 
iColDate = 6 

Do While Cells(iCol, 3).Value <> "" 
    dStart = Format(Cells(iCol, 3).Value, "dd/mm/yyyy") 
    dEnd = Format(Cells(iCol, 4).Value, "dd/mm/yyyy") 
    For dDate = dStart To dEnd 
     Cells(iColDate, 7).Value = dDate 
     Cells(iColDate, 6).Value = Cells(iCol, 2).Value 
     iColDate = iColDate + 1 
    Next 
    iCol = iCol + 1 
Loop 


End Sub 

はまったく助けに感謝します。本当にありがとう!

+0

DoWorkに「Or Worksheetfunction.Counta(Rows(iCol))= 0」を追加すると思いますセルが空白であるか否か、または行が空であるかどうかをチェックする「e」ループ。 (なぜあなたは行変数として 'iCol'を持っていますか?単に興味があります) – BruceWayne

答えて

0

Do..WhileループのインデックスFor..Nextループを使用ループのCのセルが空の場合:

Sub Dates() 

Dim dStart As Date 
Dim dEnd As Date 
Dim dDate As Date 
Dim iColDate As Integer 
Dim lastrow As Long 
Dim loop1 As Long 

lastrow = Cells(Rows.Count, "C").End(xlUp).Row 

iColDate = 6 

For loop1 = 6 To lastrow 
    dStart = Format(Cells(iCol, 3).Value, "dd/mm/yyyy") 
    dEnd = Format(Cells(iCol, 4).Value, "dd/mm/yyyy") 
    For dDate = dStart To dEnd 
     Cells(iColDate, 7).Value = dDate 
     Cells(iColDate, 6).Value = Cells(iCol, 2).Value 
     iColDate = iColDate + 1 
    Next 
Next loop1 

End Sub 
0

最初の空の行にループする代わりに、最後の行の最初の位置を計算します。

Dim lLastRow As Long 
    lLastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row 

その後、代わりにFOR loopRows.Countを使用して、あなたがループを実行する前に、最後の行をチェックして、追い出さ避けるこの方法を試してみてください代わりに

Dim lIndex as long 
For lIndex = 1 to lLastRow 

' do stuff here 

Next 
関連する問題