2017-10-06 12 views
1

ここで私が見ているのは、VBA - 式がセル内で遅いかどうかを確認する

Sheets("Sheet1").Select 
Range("D1:D1").Select 
Selection.QueryTable.Refresh BackgroundQuery:=False 

これで問題は、私はそれを実行するたびに、それは私がAとBの列を持っている数式を台無しです:私は、私は、次のVBAを使っての一部をインポートするシートを持っています。次のようにだから私はそれをチェックしますサブを作成:

Sub fixAnB() 
    Dim sh As Sheet9 
    Dim rw As Range 
    Set sh = Sheet9 
    sh.EnableCalculation = False 
    'Sheets("Sheet1") 
    Dim i As Long 
    i = 0 
    Dim f1 As String, f2 As String 
    For Each rw In sh.Rows 
     i = i + 1 
     If i > 1 And sh.Cells(rw.Row, 4).Value <> "" Then 
      f1 = "=CONCATENATE(G" & i & ",J" & i & ")" 
      f2 = "=CONCATENATE(I" & i & ",H" & i & ",J" & i & ")" 
      If sh.Cells(rw.Row, 1).Formula <> f1 Then sh.Cells(rw.Row, 1).Formula = f1 
      If sh.Cells(rw.Row, 2).Formula <> f2 Then sh.Cells(rw.Row, 2).Formula = f2 
     End If 
     If sh.Cells(rw.Row, 4).Value = "" Then Exit For 
    Next rw 
    sh.EnableCalculation = True 
End Sub 

をこれで私の問題は、私がそのシート上の任意の場所の間2万200,000レコードを持つことができるということです。したがって、サブを使って数式を修正するには約10〜15分かかります。それはめちゃくちゃに私は私のデータ

または 2.ことを確認する方法をインポート参照をしないように、元の問題を解決するために

  1. 方法:私は解決策の一つを探していますフィクサーサブランウェイの方が速くなります。

    yallとは何と思いますか?

+0

が、私が代わりに[コードレビュー](httpsに投稿することをお勧め、ちょうど遅いです:// codereview.stackexchange.com/)。つまり、開始時にscreenupdatingを回してみてください( 'Application.ScreenUpdating = False')。 – BruceWayne

+0

私は実際に#1への答えを期待していたので、そのサブルーチンをまったく実行する必要はありません –

+0

データがテーブルとして設定されている場合、これが起こりますか? – QHarr

答えて

1

(それが200000行の私のテストで0.5秒未満かかります)このコードを試してみてください。これが動作する場合

Sub Test() 
t = Timer 
' Application.ScreenUpdating = False 
' Application.EnableEvents = False 
' Application.Calculation = xlCalculationManual 

Dim sh As Worksheet 
Set sh = ActiveSheet 
Dim i As Long 
i = sh.Range("D1").End(xlDown).Row 
sh.Range("A2:A" & i).Formula = "=CONCATENATE(G2,J2)" 
sh.Range("B2:B" & i).Formula = "=CONCATENATE(I2,H2,J2)" 

' Application.ScreenUpdating = True 
' Application.EnableEvents = True 
' Application.Calculation = xlCalculationAutomatic 
MsgBox Timer - t 
End Sub 
関連する問題