2017-01-23 4 views
0
Worksheets(ShtName).Range("D4:D91").Value = Worksheets("Builder").Range("C244:C331").Value 
'MsgBox ActiveSheet.Name 
Dim i As Long, j As Long, k As Long 
Dim N As Long 
N = Cells(Rows.Count, "A").End(xlUp).Row 
j = 2 
k = 1 

Dim rownum As Long 
Dim colnum As Long 
Dim data, result 
colnum = 1 

Dim rng As Range 
Dim counter As Integer 

Set rng = Worksheets(ShtName).Range("D4:D91") 

i = 1 

For counter = 1 To rng.Rows.Count 

    If rng.Cells(i) = "0" Then 
     rng.Cells(i).Cells.Delete 
    Else 
     i = i + 1 
    End If 

Next 

With Range("D4", Cells(Rows.Count, "D").End(xlUp)).Resize(, 2) 
data = .Value 
numrows = UBound(data) 
rownum = 4 

Range((Cells(5, 4)), (Cells(91, 4))).Copy 
Cells(4, 5).Select 
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ 
    False, Transpose:=True 

Cells(5, 4).Select 

Range("D5:D30").Delete Shift:=xlUp 
End With 

は、それは私が複数回使用時間がかかっdeleteメソッドの問題を持っていた私が知っているabitは厄介だが、私はそれをどのように改善できるか疑問に思う、ない質問をする方法が良くわからいずれかコピーとトランスポーズの「アルゴリズム」が遅いのはなぜですか?

+0

どのように遅いですか?いくつかの改善がありますが、なぜコードが遅くなるべきかはわかりません。あなたのコードのすべてを投稿していないように見えますが。 – SJR

+0

イベントがトリガーされている可能性があります。イベントを無効にして最後に有効にしてみてください。 –

+2

あなたのコードがうまくいくなら、私は[codereview.se]に最適だと思います。あなたはそれを再フォーマットし、考えて、あなたのコードの意図とそれが何であるかの説明に意味のあるタイトルを提供し、また完全な作業コード( 'Sub'宣言を含む)を提供しなければならないでしょう –

答えて

0

。代わりに、私は.clearメソッドを使い、最後にすべての空白を一番下に並べ替えます。

+0

歓声は、それを実現します –

0

改善のカップル、そうはパフォーマンスの問題の源であるにもかかわらず:

の代わりにこのように、昇順に細胞(または行または列)を削除:

For counter = 1 To rng.Rows.Count 
    If rng.Cells(i) = "0" Then 
     rng.Cells(i).Cells.Delete 
    Else 
     i = i + 1 
    End If 
Next 

ことがありますこのように、降順で削除してExcelで通常よりよい:

For counter = rng.Rows.Count to 1 Step -1 
    If rng.Cells(counter) = "0" Then 
     rng.Cells(counter).Cells.Delete 
    End If 
Next 

これは、二つの「カウント」変数の必要性を排除し、ロジックを簡素化します。さらに、このループを独自の関数/サブ - おそらくfunction DeleteCellsEqualToZero(aRange as Range) as Integerに分割する方がよいでしょう。

機能のこの部分と別の部分を別々の機能/サブセットに分けておくと、パフォーマンスの問題でコードを特定するのに役立ちます。

+0

素晴らしい、ありがとう!確かにそれらを変更します –

+0

@Robot_enthusiastあなたの質問に関連性のある有用な情報を提供している場合私の答えをupvoteに気軽に:) – neizan

+0

私はしようとしたが、私は十分な担当者を持っていない私は恐れている。申し訳ありません –

関連する問題