2017-03-16 4 views
1

以下のマイコードは、入力された最初の日付に基づいて日付をデクリメントするために、また列Bが入力された場合に使用されます。 Excelにインポートされたデータは非常に大きいので、この計算は今や私のExcelの遅れを引き起こしています。それをスピードアップする方法はありますか?VBAコードが遅れを遅らせる原因

For i = 1 To rowNow - 3 

newDate = DateAdd("d", -i, oldDate) 

For Each Cell In Range("A:A").Cells 

If IsEmpty(Cell) = True And IsEmpty(Range("B:B")) = False Then Cell.Value = newDate: Exit For 

Next 
Next 
+0

あなたのループの各反復のために、あなたは潜在的に百万個の細胞をチェックしている - 本当に必要? – SJR

+0

@SJR申し訳ありませんが、私はまったく新しいvbaです。 For Each関数がこれを引き起こしているということですか?私はこれを変更しようとしましたが、その機能を使用しないと日付を減らすことはありません – rei123

+0

はい、あなたの内部ループ - とにかく以下の2つの解決策を見てください。 – SJR

答えて

2

多分これは、列Bに何があるかに応じて:

For i = 1 To rowNow - 3 
    newDate = DateAdd("d", -i, oldDate) 
    With Range("A:A") 
     On Error Resume Next 
     Intersect(.SpecialCells(xlCellTypeBlanks), .Offset(, 1).SpecialCells(xlCellTypeConstants).Offset(, -1))(1).Value = newDate 
    End With 
Next i 
+0

ありがとうございます!これは完全に機能しました! – rei123

関連する問題