2017-04-21 10 views
1

VBAマクロを使用して、列Aのテキスト文字を検索する列を挿入しています。 コードが正しく実行されています。ただし、クラッシュするようなファイルが表示されます。私はマクロを構築し、スムーズに動かしたいと考えています。 私のコードVBAコードパフォーマンスの問題

コードを最適化する方法はあります:

Sheets("Annual Rec").Select 
Columns("B:B").Select 
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove 
Selection.NumberFormat = "General" 
Range("B2:B" & Range("A" & Rows.Count).End(xlUp).Row).Formula = "=ISTEXT(RC[-1])" 
Range("B2:B" & Range("A" & Rows.Count).End(xlUp).Row).Select 
Selection.Copy 
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
    :=False, Transpose:=False 
Application.CutCopyMode = False 
+5

(http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros) – Rdster

+0

あなたがすることから始めることができ、[選択/ Activateを避け]しよう選択した3つの 'Select'と4つの' Selection'を削除します。 –

+0

'Copy' /' Paste'を 'Range(" B2:B "&Range(" A "&Rows.Count).End(xlUp))に変更します。 Row)).Value = Range( "B2:B"&Range( "A"&Rows.Count).End(xlUp).Row).Value' – Jordan

答えて

2

以下のコードは、あなたのものと同じですが、不要なものだけを除いてSelectSelectionです。

Option Explicit 

Sub CopyColPasteVal() 

Application.ScreenUpdating = False 

With Sheets("Annual Rec") 
    .Columns("B:B").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove 
    .Columns("B:B").NumberFormat = "General" 
    With .Range("B2:B" & .Range("A" & .Rows.Count).End(xlUp).Row) 
     .Formula = "=ISTEXT(RC[-1])" 
     .Copy 
     .PasteSpecial xlPasteValues 
    End With 
    Application.CutCopyMode = False 
End With 

Application.ScreenUpdating = True 

End Sub 
+0

ここで、 '.Copy'' .PasteSpecial xlPasteValues '' .Value = .Value';と等価です) – YowE3K

+0

@ YowE3Kは昼寝を取るつもりです。あなたが気に入ったら私の答えをアップグレードさせてくれます;) –

+0

私は夜も寝るつもりはない私のために昼寝休憩! :) – YowE3K

0

はこれを試してみてください:

Application.ScreenUpdating = False 
'your code 
Application.ScreenUpdating = True 

そして選択文を避けるためには、彼らは非常に遅いです。