Home > Excel VBA Macro コピー > FAQ

異なるシート間で範囲指定してコピーして貼り付けるには?

Question 18.1 Previous Next
始めまして。エクセルのマクロの為に最近、インターネット始めました。だれか、助けて! どうしてもマクロがわからなかったので、教えてください。

範囲指定でsheet1からsheet2へコピーしたいけど、うまくいきません。Sheet1内なら出来るのですが。
シート1 自作のマクロは下記のとおりです。
Sub Macro4()
10  Dim cpy As Range
20  Dim pst As Range
30  Dim ran As Range
40
50  Set cpy = Worksheets("Sheet1").Range(Cells(1, 1), Cells(1, 3))
60  Set pst = Worksheets("Sheet2").Range(Cells(1, 4), Cells(1, 6))
70   pst.Value = cpy.Value
End Sub
ちなみに Range(Cells(1, 1), Cells(1, 3)) で範囲指定したのは Range(Cells(x, 1), Cells(y, 3)) のように変数にしたいからです。 他に方法があるのでは?
Answer   Copyright (C) 1999.5.19 永井善王
上記のマクロの60行目を "Sheet1" に変えると、50行目と同一シート内になりますから、エラーは出ませんね。これを "Sheet2" に変えてから実行すると、「Rangeメソッドが失敗」のエラーが出てしまいます。

このエラーを解消するためには、あなたのマクロの60行目の直前で、Sheet2をアクティブにしましょう。(下記52行目参照)

また、あなたは、範囲指定に変数を使いたいとのことで、この点はすでにできているかと思いますが、下記にまとめておきました。 参考にしてください。
'------------------------------------------------------------------------------
Sub 異なるシート間で範囲指定してコピーして貼り付ける()
10  Dim cpy As Range
20  Dim pst As Range
30  '
40  Sheets("Sheet2").Range("D1:F1").Clear       '※1、2 クリアしておく
42  x = 1                                       '※3 左上セルの行番号
44  y = 1                                       '※3 右下セルの行番号
46  Worksheets("Sheet1").Activate               '※4 シートをアクティブにする
50      Set cpy = Worksheets("Sheet1").Range(Cells(x, 1), Cells(y, 3)) '※3
52  Worksheets("Sheet2").Activate               '※2
60      Set pst = Worksheets("Sheet2").Range(Cells(x, 4), Cells(y, 6)) '※3
70      pst.Value = cpy.Value               '貼付範囲の値をコピー範囲の値と等しくする
End Sub
'------------------------------------------------------------------------------
<コメント>
※1 このコードは動作確認用につき不可欠ではない
※2 Sheet2には貼り付けるシート名を記入
※3 1にはセルの行番号を記入
※4 Sheet1にはコピーするシート名を記入
他の方法としては、「Macro」のページの「コピー」に 「クリッブボードを経由せずにコピーして貼り付ける」 とか、いろいろ掲載してあります。どうぞ、ゆっくり見てみてください。

サンプルブックのダウンロードは ここをクリック (YNxv991_kotonaru.xls 56KB)
※ 一旦、ブックをハードディスクに保存し、後で改めて開いてから実行してください。

 

Excel VBA Macro

Excel DownLoad