2017-11-07 13 views
0

以下は、Excelが癲癇性発作を起こしているかのように見えます。複数の隣接していないセルを含む範囲を同じセルの別のシートにコピー

何か先史時代のものがあれば助けてください。

Sub Data() 
Sheets("2").Unprotect "Joe" 
Worksheets("3").Range("a").Copy 
Worksheets("2").Range("D10").PasteSpecial Paste:=xlPasteValues 
Worksheets("3").Range("b").Copy 
Worksheets("2").Range("L10").PasteSpecial Paste:=xlPasteValues 
Worksheets("2").Range("L18").PasteSpecial Paste:=xlPasteValues 
Worksheets("3").Range("c").Copy 
Worksheets("2").Range("D11").PasteSpecial Paste:=xlPasteValues 
Worksheets("3").Range("d").Copy 
Worksheets("2").Range("L11").PasteSpecial Paste:=xlPasteValues 
Worksheets("3").Range("e").Copy 
Worksheets("2").Range("D17").PasteSpecial Paste:=xlPasteValues 
Worksheets("3").Range("f").Copy 
Worksheets("2").Range("L17").PasteSpecial Paste:=xlPasteValues 
Worksheets("3").Range("g").Copy 
Worksheets("2").Range("D18").PasteSpecial Paste:=xlPasteValues 
Worksheets("3").Range("h").Copy 
Worksheets("2").Range("D19").PasteSpecial Paste:=xlPasteValues 
Worksheets("3").Range("i").Copy 
Worksheets("2").Range("L19").PasteSpecial Paste:=xlPasteValues 
Worksheets("3").Range("j").Copy 
Worksheets("2").Range("D20").PasteSpecial Paste:=xlPasteValues 
Worksheets("3").Range("k").Copy 
Worksheets("2").Range("E22").PasteSpecial Paste:=xlPasteValues 
Worksheets("3").Range("l").Copy 
Worksheets("2").Range("E23").PasteSpecial Paste:=xlPasteValues 
Worksheets("3").Range("m").Copy 
Worksheets("2").Range("E24").PasteSpecial Paste:=xlPasteValues 
End Sub 
+0

問題を解決した場合は、以下の回答の1つを受け入れてください。 – jeffreyweir

答えて

0

は、あなたのサブの先頭にApplication.ScreenUpdating = Falseを入れて、そして最後にApplication.ScreenUpdating = True

+0

これで成功しません。私はちょうどSub Name()とEnd Subの直前の2行目の直後に最初の行を追加しましたが、最初の行でデバッガを開始します。私は何か間違っているのですか? – Haellion

1

コピー貼り付けの代わりに、コピー先のセルの値を元のセルの値に設定することもできます。たとえば:Excelosaurusが提案し、あなたのマクロの開始時に画面の更新をオフにするよう

Worksheets("2").Range("D10").Value = Worksheets("3").Range("a").Value 

エクセルのアプリケーションウィンドウに行動のような発作を防ぐために、行います。 (そして最後にもう一度オンにしてください)。

+1

これについて考えていたが、 "a"などの名前付き範囲には1つのセルだけが含まれていることは何も保証されていない。 – Excelosaurus

+0

それは本当です。私は1:1と仮定しました。 jeffreyweirが指摘したように、名前付き範囲が単一のセルではない場合には、「Range.Resize」を使用することをお勧めします。 –

+0

お返事ありがとうございました。上記の式をコードのすべてのインスタンスに使用し、完全にスムーズに動作します。幸いにも、このアプリケーションでは、すべての範囲が単一セルでしたが、複数のセルで1つをシミュレートし、Range.Resizeもうまく機能しました。 – Haellion

2
Sub Data() 

Dim rng As Range 

With Application 
    .ScreenUpdating = False 
    .Calculation = xlCalculationManual 
End With 


Sheets("2").Unprotect "Joe" 

With Worksheets("2") 
    Set rng = Range("a") 
    .Range("D10").Resize(rng.Rows.Count, rng.Columns.Count).Value2 = rng.Value2 

    Set rng = Range("b") 
    .Range("L10").Resize(rng.Rows.Count, rng.Columns.Count).Value2 = rng.Value2 

'...and so on 

End With 


With Application 
    .ScreenUpdating = True 
    .Calculation = xlCalculationAutomatic 
End With 

End Sub 

a、b、cに範囲名を使用しているため、ローカルスコープでない限りシート名で修飾する必要はありません。

+0

すぐにお返事ありがとうございました。私はまだ完全に理解していませんが、これは私にとって非常に進歩しているので、完璧に動作します。しかし、私は少し頭を張ってそこに着いた。 – Haellion

+0

クール。問題を解決した場合は、回答としてマークしてください。 – jeffreyweir

関連する問題