マクロ記録でVBA
別のシートにコピーする2

Excelマクロの自動記録を使って、エクセルVBAの初心者向け入門解説
公開日:2013年5月以前 最終更新日:2013-02-18

第7回.別のシートにコピーする2



前回は、値の貼り付けを「マクロの記録」で行い、そのマクロを修正しました。


以下になります。


Sub Macro3()
  Sheets("Sheet1").Range("A1:J10").Copy
  Sheets("Sheet2").Range("A1").PasteSpecial _
    Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End Sub


今回は、同じ事を「.COPY」を使わずにやってみましょう。


そもそも、これは何をしているかと言うと、


「.COPY」で、セルをクリップボードに入れ、


クリップボードの値のみセルに入れています。


そこで、クリップボードの代わりに、変数へ入れてから、セルに入れてみましょう。




Sub Macro4()
  Dim ClipBoard
  ClipBoard = Sheets("Sheet1").Range("A1:J10")
  Sheets("Sheet2").Range("A1:J10") = ClipBoard
End Sub


変数ClipBoardに入れ、その変数をセルに入れています。


Sheets("Sheet1").Range("A1:J10").Copy

ClipBoard = Sheets("Sheet1").Range("A1:J10")
そして、

Sheets("Sheet2").Range("A1").PasteSpecial _
    Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

Sheets("Sheet2").Range("A1:J10") = ClipBoard

と、同じように記述しています。


ClipBoard = Sheets("Sheet1").Range("A1:J10")

は、

ClipBoard ← Sheets("Sheet1").Range("A1:J10")

ですね、セルの値を変数に入れます。


Sheets("Sheet2").Range("A1:J10") = ClipBoard
は、

Sheets("Sheet2").Range("A1:J10") ← ClipBoard
です、変数の値をセルに入れています。


では、実行してみましょう。


ちゃんとコピー出来ちゃいましたね。


簡単ですね。


複数のセルを1つの変数に入れられるんだ・・・


入れられるのです。


どのように入っているか・・・その説明は、大分先になります。


今は、これで出来ると言う事だけ覚えて下さい。



でも、上をさらに簡潔にまとめると、


Sheets("Sheet2").Range("A1:J10") ← ClipBoard ← Sheets("Sheet1").Range("A1:J10")


ということですよね。


それなら、直接入れられないのって思いますよね。


つまり、

Sub Macro5()
  Sheets("Sheet2").Range("A1:J10") = Sheets("Sheet1").Range("A1:J10")

End Sub


これで良さそうに思えます。


では、実行してみて下さい。


何も変化が無かったはずです。

(あっ、ちゃんと、Sheet2の内容は消してから実行して下さいね。)


どうなっているのでしょうか。


この指定はダメなのです。しょぼん


でも、




Sub Macro6()
  Sheets("Sheet2").Range("A1") = Sheets("Sheet1").Range("A1")

End Sub


このように、1つのセルだけでやってみて下さい。


どうです、コピーされましたよね。


では、複数セルの場合は、一度変数に入れないといけないのでしょうか。


いやいや、これなら、コピーできます。


Sub Macro7()
Sheets("Sheet2").Range("A1:J10").FormulaR1C1 = Sheets("Sheet1").Range("A1:J10").FormulaR1C1
End Sub


前に、FormulaR1C1は要らないと言いましたが、復活です。


突然の復活ですね。


なんなんだー、と言いたいですか・・・私も言いたい(笑)


FormulaR1C1は要らないと言いましたが、それは値を入れる時のことです。


つまり、上も、


Sheets("Sheet2").Range("A1:J10") = Sheets("Sheet1").Range("A1:J10").FormulaR1C1


これならOKです。



上記は、普通は(多くの場合、多くの人がという意味です)、


FormulaR1C1ではなく、Valueを使って、


Sheets("Sheet2").Range("A1:J10").Value = Sheets("Sheet1").Range("A1:J10").Value


と記述します。


しかし、マクロの記録では、FormulaR1C1に値を入れています。


何故なのか、何が違うのか、Valueとは何か、FormulaR1C1とは何か・・・


それは、計算式をセルに入れる時まで、置いておきましょう。


Valueとの違いをその時に説明します。


ただ、当面は、文字や数値を入れる場合は、Valueを使うと覚えて下さい。



まとめると、値を入れる時(=の左にある時)は、FormulaR1C1を省略して良いが


値を取得(=の右にある時)は、FormulaR1C1を省略してはいけない。


ですから、セルの値を、他のセルに入れる時は、




Sheets(シート名).Range(範囲).FormulaR1C1 = Sheets(シート名).Range(範囲).FormulaR1C1

または、
Sheets(シート名).Range(範囲).Value = Sheets(シート名).Range(範囲).Value


のように、省略せずに書いて下さい。


または、


変数 = Sheets(シート名).Range(範囲)
Sheets(シート名).Range(範囲) = 変数


のように、一旦変数にいれてから、セルにいれます。



今回は、さらに、100マスを作った時のマクロを手直しして、コピーしてみましょう。


元は、


Sub Macro1()
  Dim i
  Dim j
  Dim k
  i = 1
  k = 1
  Do While i <= 10
    j = 1
    Do While j <= 10
     Cells(i, j) = k
     k = k + 1
     j = j + 1
    Loop
    i = i + 1
  Loop
End Sub


これを手直しして、


Sub Macro1()
  Dim i
  Dim j
  i = 1
  Do While i <= 10
    j = 1
    Do While j <= 10
     Sheets("Sheet2").Cells(i, j) = Sheets("Sheet1").Cells(i, j)
     j = j + 1
    Loop
    i = i + 1
  Loop
End Sub


太字の部分の違いと、変数kが不要になっています。


このプログラムが基本だと言いました。


つまりは、こういうことなのです。


これさえ書けるのなら、大抵のことは出来てしまうのです。


多少プログラムが長くても、大した問題ではありません。


コピペすれば一瞬で完成するのですから。


そして、今後も頻繁に使用することになるでしょう。


ですから、このプログラムだけは、絶対に体得して下さい。





同じテーマ「マクロの記録でVBA」の記事

第4回.連続数値を入れる
第5回.100マスに数値を入れる
第6回.別のシートにコピーする
第7回.別のシートにコピーする2
第8回.計算式を入れる
第9回.計算式をコピーする
第10回.計算結果を入れる
第11回.イミディエイトで値の確認
第12回.セルに色を塗る
第13回.罫線を引く
第14回.行列を入れ替えて貼り付け


新着記事NEW ・・・新着記事一覧を見る

AIは便利なはずなのに…「AI疲れ」が次の社会問題になる|生成AI活用研究(2026-02-16)
カンマ区切りデータの行展開|エクセル練習問題(2026-01-28)
開いている「Excel/Word/PowerPoint」ファイルのパスを調べる方法|エクセル雑感(2026-01-27)
IMPORTCSV関数(CSVファイルのインポート)|エクセル入門(2026-01-19)
IMPORTTEXT関数(テキストファイルのインポート)|エクセル入門(2026-01-19)
料金表(マトリックス)から金額で商品を特定する|エクセル練習問題(2026-01-14)
「緩衝材」としてのVBAとRPA|その終焉とAIの台頭|エクセル雑感(2026-01-13)
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
8.マクロとは?VBAとは?VBAでできること|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.メッセージボックス(MsgBox関数)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。
This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ