2017-03-24 11 views
1

私は2017年から2066年までの50年の表を持つワークシートを用意しています。このマクロは最初の10年間の印刷領域を作成しており、10年目はユーザー入力で、他の列。私たちは10年連続(2026)を削除し、ユーザー入力が2026より大きい場合にのみユーザー入力に置き換えます。VBA - 列を非表示にするためのランタイムを最適化する

私のマクロは本当に遅いと私はどのようにフィードバックを探していますそれをスピードアップする。

With Sheet1 
    If userinputyear > 2026 Then 
    c = 10 'column index corresponding to consecutive 10th year 2026 
    Do While .Cells(5, c) <> userinputyear 
     .Cells(5, c).EntireColumn.Hidden = True 
     c = c + 1 
    Loop 
    Do While c + 1 <> 50 'column index corresponding to year 2066 
     .Cells(5, c + 1).EntireColumn.Hidden = True 
     c = c + 1 
    Loop 
end with 
+0

(あなたの列は年に基づいてソートされている想定)。 – bernie

+0

Bernieありがとう、私は私のマクロでそれを持っています。 – lostinOracle

+2

最後のループをスキップし、 '.Cells(5、c + 1).Resize(1,50-c).EntireColumn.Hidden = True'のようなものを使用してください。 –

答えて

1

これは高速になりますか?あなたが一番下に先頭に `Application.ScreenUpdating = false`をを使用して起動し、` Application.ScreenUpdating = true`をすることができます

With Sheet1 
    If userInputYear > 2026 Then 
     .Cells(1, 10).Resize(, 41).EntireColumn.Hidden = True 
     .Columns(userInputYear - 2016).Hidden = False 
    End If 
End With 
+0

10年目以降のすべての列を非表示にしてから、ユーザー入力を再表示しますか? – lostinOracle

+1

@ excelmonkey93列が1年ごとにソートされている場合は、どうしてですか? –

+0

華麗な、それは考えていない..ありがとう笑。実行時のテストの良い方法は何ですか? – lostinOracle

関連する問題