2016-09-27 8 views
0

現在、あるシートのデータをコピーして別のシートに保存するマクロがあります。私が持っている問題は、式をコピーして貼り付けているだけで、値をコピーして貼り付ける必要があるということです。Excelでの値の貼り付けがマクロの式でない

Sub Archive_Execution() 

Dim mainworkbook As Workbook 
Set mainworkbook = ActiveWorkbook 
Dim rangeName 
Dim strDataRange As Range 
Dim keyRange As Range 

rangeName = "Archive_Execution" 
Application.Goto Reference:=rangeName 
Selection.Copy 
Sheets("Archive Execution").Activate 
Range("A" & Rows.Count).End(xlUp).Offset(1).Select 
mainworkbook.Sheets("Archive Execution").Paste 

Sheets("Archive Execution").Activate 
Set strDataRange = Range("A2:AA1000000") 
Set keyRange = Range("D1") 
strDataRange.Sort Key1:=keyRange, Order1:=xlAscending 

End Sub 

すべてのヘルプは大幅に値のみがコメントで述べたように式

+0

は、技術的に必要なのは、 '置き換えmainworkbook.Sheets(「アーカイブの実行」)である。' mainworkbook.Sheets(「アーカイブの実行」)とPaste'。PasteSpecial xlPasteValues'が、私はあなたのコードを見直しお勧めします'Select'、' Copy'、 'Paste'の使用を避けるためです。代わりに、新しいワークシートのセルをインポートする値に設定することができます。 – Jordan

+0

ありがとうございます。 .PasteSpecial xlPasteValuesを含めてみましたが、WorksheetクラスのPasteSpecialメソッドのエラーが発生しましたか?新しいワークシートのセルを値に設定することで、意味を広げることができますか? –

+0

申し訳ありませんが、ワークシートの指定時に貼り付ける範囲を指定する必要があります。 'Sheets(" Archive Execution ")。範囲(" A "とRows.Count).End(xlUp).Offset(1).PasteSpecial xlPasteValues' – Jordan

答えて

2

ない貼り付けただけの値をコピーしたい場合はRange().PasteSpecial xlPasteValuesを使用しているように私のコードを微調整する上でいただければ幸いです。

IntersectメソッドとWorksheets("").UsedRangeを使用して範囲をトリミングすることもおすすめします。

Sub Archive_Execution() 

    Dim strDataRange As Range 
    Dim keyRange As Range 

    With Sheets("Archive Execution") 
     Range("Archive_Execution").Copy 
     .Range("A" & Rows.Count).End(xlUp).Offset(1).PasteSpecial xlPasteValues 
    End With 

    With Sheets("Archive Execution") 
     Set strDataRange = Intersect(.Range("A2:AA" & .Rows.Count), .UsedRange) 
     Set keyRange = .Range("D1") 
     strDataRange.Sort Key1:=keyRange, Order1:=xlAscending 
    End With 

End Sub 
+0

あなたの答えをありがとう。値をコピーしてメインワークシートに貼り付けます。シート( "アーカイブ実行")。行を貼り付け、エラー 'オブジェクトが必要です' –

+0

ありがとうございました:) –

1

コピーアンドペーストを使用しないようにするには、コピー貼りよりはるかに高速です。

Sub Archive_Execution() 

    Dim mainworkbook As Workbook, rangeName 
    Dim strDataRange As Range, keyRange As Range 
    Dim r As Integer, c As Integer 

    Set mainworkbook = ActiveWorkbook 
    rangeName = "Archive_Execution" 
    r = Range(rangeName).Rows.Count 
    c = Range(rangeName).Columns.Count 

    With Sheets("Archive Execution").Range("A" & Rows.Count).End(xlUp).Offset(1) 
     .Resize(r, c) = Range(rangeName).Value 
    End With 

    Sheets("Archive Execution").Activate 
    Set strDataRange = Range("A2:AA1000000") 
    Set keyRange = Range("D1") 
    strDataRange.Sort Key1:=keyRange, Order1:=xlAscending 

End Sub 
+0

範囲をサイズ変更する必要がありますその技法を使用して新しいデータを適合させます。 –

+0

True、コピーと貼り付けの代替として回答を編集しました。 –

+0

'Sheets(" Archive Execution ")。Range()'の各範囲は 'Sheets(" Archive Execution ")を参照できるように修飾されている必要があり、resizeを使用するときれいになります。あなたの答えを編集してもよろしいですか? –

関連する問題