2017-09-27 5 views
0

セルAE3に数式を入れて最後の行にコピーすると、5000行以上の行がありますが、なぜ処理に時間がかかるのでしょうか? )、これを行うには良い方法がありますか?私はリストが毎日異なる範囲の動的データであるので最後の行にコピーしたい。ありがとう。excel fill formula最終行まで

Sub FillRows() 
Dim col_AE As String 
Sheet1.Select 

col_AE = "=IFERROR(INDEX(setting!C[-17],MATCH(smart!RC[-9],setting!C[-18],0)),"""")" 
If col_AE <> vbNullString Then 
    For j = 3 To Range("A" & Rows.Count).End(xlUp).Row - 1 
     If Range("ae" & j).Value = vbNullString Then 
      Range("ae" & j).Value = col_AE 
     End If 
    Next j 
    End If 
End Sub 

答えて

1

あなたはScreenUpdatingと計算の両方をオフにする必要があります。

この行If col_AE <> vbNullString Thenは何もしていません。

明示的なオプション

Sub FillRows() 
    Application.ScreenUpdating = False 
    Application.Calculation = xlCalculationManual 
    Dim col_AE As String 

    With Sheet1 

     For j = 3 To .Range("A" & .Rows.Count).End(xlUp).Row - 1 
      If .Range("ae" & j).Value = vbNullString Then 
       .Range("ae" & j).FormulaR1C1 = "=IFERROR(INDEX(setting!C[-17],MATCH(smart!RC[-9],setting!C[-18],0)),"""")" 
      End If 
     Next j 

    End With 
    Application.Calculation = xlCalculationAutomatic 
    Application.ScreenUpdating = True 
End Sub 

シートは、式が追加されるたびに再計算されるため、処理時間の大部分が使用されています。 ScreenUpdatingとCalculationsをオフにして、すべての数式を置き換えます。このようにして、数式が一貫しており、ユーザーが導入したエラーが修正されることがわかります。

Sub FillRows2() 
    Application.ScreenUpdating = False 
    Application.Calculation = xlCalculationManual 
    Dim col_AE As String 

    With Sheet1 
     .Range("A3", "A" & .Rows.Count).End(xlUp).FormulaR1C1 = "=IFERROR(INDEX(setting!C[-17],MATCH(smart!RC[-9],setting!C[-18],0)),"""")" 
    End With 

    Application.Calculation = xlCalculationAutomatic 
    Application.ScreenUpdating = True 
End Sub 
+0

共有いただきありがとうございます! – robin

0

これにより、スピードアップする可能性があります。実行中に画面の更新をオフにすることがあります。

Application.ScreenUpdating = False 
Application.ScreenUpdating = True 
+0

共有ありがとうございました – robin

0

これを試してください:式の多数を扱う場合

Option Explicit 

Sub fillFormula() 


Dim wbk1 As Workbook 
Dim lastRow As Long 


Set wbk1 = ActiveWorkbook 

    With wbk1.Sheets("sheet1") 

     lastRow = .Range("A" & .Rows.Count).End(xlUp).Row 
     lastRow = lastRow - 1 


     .Range("AE3:AE" & lastRow).Formula = _ 
     "=IFERROR(INDEX(setting!C[-17],MATCH(smart!RC[-9]," _ 
     & "setting!C[-18],0)),"""")" 



    End With 




End Sub 
+0

ありがとうございます、コードを試してください。 – robin

関連する問題