2017-02-15 6 views
0

私はA1を見て、別のシートにコピーして特定の範囲に貼り付け、元のシートに戻り、各列をオフセットします(コピー&ペースト手順) Tを押すと、1行下に移動して繰り返し、シートをPDFとして保存し、このプロセスを約100回繰り返します。アクティブセルのコピーとペーストの代わり

このマクロの速度を上げるにはどうすればいいですか?Dim rngをワークシートとして追加します。 次に、rngをワークシート( "コストが得られました")などに設定します。しかし、私はactivecellを外して部品をオフセットして置き換えています...?

2枚のシートはマクロを実行するときに既に開いている同じブックにあります。

助けてください!

Sub Input_Template() 
Application.Calculation = xlCalculationManual 
Application.ScreenUpdating = False 
Application.EnableEvents = False 
Application.DisplayStatusBar = False 

Dim E26val As String 

'Go to A1 in Cost Gained sheet, look for next available cell. 
Sheets("Cost Gained SelfBill").Select 
Range("A1").Select 
ActiveCell.Offset(1, 0).Select 
Do Until ActiveCell.EntireRow.Hidden = False 
ActiveCell.Offset(1, 0).Select 
Loop 

Do 
'1 
ActiveCell.Offset(0, 0).Select 
Selection.Copy 
Sheets("Debit Note").Select 
Range("G8,C6").Select 
ActiveSheet.PasteSpecial 
Range("C6").Select 
ActiveCell.FormulaR1C1 = "=CONCATENATE(R[2]C[4], ""Q-DN"")" 
'2 
Sheets("Cost Gained SelfBill").Select 
ActiveCell.Offset(0, 1).Select 
Selection.Copy 
Sheets("Debit Note").Select 
Range("G11").Select 
ActiveSheet.PasteSpecial 
'3 
Sheets("Cost Gained SelfBill").Select 
ActiveCell.Offset(0, 2).Select 
Selection.Copy 
Sheets("Debit Note").Select 
Range("G16,C22").Select 
ActiveSheet.PasteSpecial 
'4 
Sheets("Cost Gained SelfBill").Select 
ActiveCell.Offset(0, 2).Select 
Selection.Copy 
Sheets("Debit Note").Select 
Range("G9,G22,G24,G26").Select 
ActiveSheet.PasteSpecial 
'5 
Sheets("Cost Gained SelfBill").Select 
ActiveCell.Offset(0, 2).Select 
Selection.Copy 
Sheets("Debit Note").Select 
Range("G10").Select 
ActiveSheet.PasteSpecial 
'6 
Sheets("Cost Gained SelfBill").Select 
ActiveCell.Offset(0, 2).Select 
Selection.Copy 
Sheets("Debit Note").Select 
Range("G7").Select 
ActiveSheet.PasteSpecial 
'7 
Sheets("Cost Gained SelfBill").Select 
ActiveCell.Offset(0, 1).Select 
Selection.Copy 
Sheets("Debit Note").Select 
Range("G15").Select 
ActiveSheet.PasteSpecial 
'8 
Sheets("Cost Gained SelfBill").Select 
ActiveCell.Offset(0, 1).Select 
Selection.Copy 
Sheets("Debit Note").Select 
Range("C9").Select 
ActiveSheet.PasteSpecial 
'9 
Sheets("Cost Gained SelfBill").Select 
ActiveCell.Offset(0, 1).Select 
Selection.Copy 
Sheets("Debit Note").Select 
Range("C10").Select 
ActiveSheet.PasteSpecial 
'10 
Sheets("Cost Gained SelfBill").Select 
ActiveCell.Offset(0, 1).Select 
Selection.Copy 
Sheets("Debit Note").Select 
Range("C11").Select 
ActiveSheet.PasteSpecial 
'11 
Sheets("Cost Gained SelfBill").Select 
ActiveCell.Offset(0, 1).Select 
Selection.Copy 
Sheets("Debit Note").Select 
Range("C12").Select 
ActiveSheet.PasteSpecial 
'12 
Sheets("Cost Gained SelfBill").Select 
ActiveCell.Offset(0, 1).Select 
Selection.Copy 
Sheets("Debit Note").Select 
Range("C13").Select 
ActiveSheet.PasteSpecial 
'13 
Sheets("Cost Gained SelfBill").Select 
ActiveCell.Offset(0, 1).Select 
Selection.Copy 
Sheets("Debit Note").Select 
Range("C14").Select 
ActiveSheet.PasteSpecial 
'14 
Sheets("Cost Gained SelfBill").Select 
ActiveCell.Offset(0, 1).Select 
Selection.Copy 
Sheets("Debit Note").Select 
Range("C15").Select 
ActiveSheet.PasteSpecial 
'15 
Sheets("Cost Gained SelfBill").Select 
ActiveCell.Offset(0, 1).Select 
Selection.Copy 
Sheets("Debit Note").Select 
Range("E26").Select 
ActiveSheet.PasteSpecial 
'16 
Sheets("Cost Gained SelfBill").Select 
ActiveCell.Offset(0, 8).Select 
Selection.Copy 
Sheets("Debit Note").Select 
Range("C16").Select 
ActiveSheet.PasteSpecial 

With Sheets("Debit Note") 
E26val = .Range("E26").Value 
With .Range("G9,G22,G24,G26") 
    Select Case E26val 
     Case Is = "GBP" 
      .NumberFormat = "$#,##0.00" 
     Case Is = "EUR" 
      .NumberFormat = "[$€-2] #,##0.00" 
     Case Is = "USD" 
      .NumberFormat = "[$$-409]#,##0.00" 
     Case Else 
      'Nothing 
    End Select 'E26val 
End With '.Range("G9,G22,G24,G26") 
End With 'Sheets("Sheet1") 

Range("B22,G16").Select 
Selection.NumberFormat = "General" 
Range("G15").Select 
Selection.Style = "Hyperlink 2" 

    Sheets("Debit Note").Select 
    ChDir "P:\Feb\" 
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ 
    "P:\Feb\" & Range("G8").Value 
    'Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _ 
    :=False, OpenAfterPublish:=False 


Sheets("Cost Gained SelfBill").Select 
ActiveCell.Select 
ActiveCell.Offset(1, -26).Select 
Do Until ActiveCell.EntireRow.Hidden = False 
ActiveCell.Offset(1, 0).Select 
Loop 
Loop Until ActiveCell.Row = "20000" 

Application.Calculation = xlCalculationAutomatic 
Application.ScreenUpdating = True 
Application.EnableEvents = True 
Application.DisplayStatusBar = True 

End Sub 

また、これは私のマクロの線も減らすのに役立ちます。

+0

'.Select'は使用しないでください。セルを直接参照するだけです。 'Sheets(" Cost Billed SelfBill ")。Range(" A1 ")。また、 'Copy' /' Paste'を実行しないでください。セルの値を必要な値に設定します。 'Range(" A1 ")。Value = Range(" A2 ")。Value' – Jordan

+0

ありがとうございました。いくつかのセルが除外されています。私はあなたのアドバイスを取って、 '1 Range( "C6")の最後の行に使用します。 –

+0

[これは良いSOスレッドです](https://stackoverflow.com/questions/10714251/how-to-avoid -use-select-in-excel-vba-macros)を使って '.Select' /' .Activate'を使うのを避ける方法について説明します。 – BruceWayne

答えて

0

を探しているため

おかげで私は(G15で'16に注意することはG9のノート8」から)、あなたがループにして、これをクリーンアップする可能性が把握コードの最初の半分のビットを通して見てきましたあなたにいくつかの時間を節約...あなたが行を下に行き続けるので、声明のために働くでしょう:

Dim i as Integer 

For i = 9 to 15 

    Sheets("Cost Gained Self Bill").Cells(,).Copy 'Hard to tell which cell 
    Sheets("Debit Note").Cells(i,7).PasteSpecial xlValues 'Column G = column 7 

Next i 

あなたはおそらくあまりにも、他の項目のいくつかのために同様の操作を行うことができるだろう。コピー部分では、5行のオフセットを記述するセル(i + 5,2)に似た何かを使用することができます。列2では、各行iが最後のiまで移動します。

関連する問題