Excelマクロの記録で覚えるVBA | 第7回.別のシートにコピーする2 | Excelマクロの自動記録を使って、エクセルVBAの初心者向け入門解説



最終更新日: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が不要になっています。


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


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


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


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


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


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


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






同じテーマ「Excelマクロの記録で覚えるVBA」の記事

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

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

SUMIFの間違いによるパフォーマンスの低下について|エクセル関数超技(6月17日)
条件式のいろいろな書き方:TrueとFalseの判定とは|ExcelマクロVBA技術解説(6月15日)
空白セルを正しく判定する方法2|ExcelマクロVBA技術解説(5月6日)
フルパスをディレクトリ、ファイル名、拡張子に分ける|ExcelマクロVBA技術解説(4月15日)
テキストボックスの各種イベント|Excelユーザーフォーム入門(4月9日)
フォルダ(サブフォルダも全て)削除する、Optionでファイルのみ削除|ExcelマクロVBAサンプル集(4月4日)
最後の空白(や指定文字)以降の文字を取り出す|エクセル関数超技(3月26日)
先頭の数値、最後の数値を取り出す|エクセル関数超技(3月26日)
Excelファイルを開かずにシート名をチェック|ExcelマクロVBAサンプル集(3月23日)
数式の参照しているセルを取得する|ExcelマクロVBAサンプル集(3月18日)

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

1.最終行の取得(End,Rows.Count)|ExcelマクロVBA入門
2.RangeとCellsの使い方|ExcelマクロVBA入門
3.徹底解説(VLOOKUP,MATCH,INDEX,OFFSET)|エクセル関数超技
4.Range以外の指定方法(Cells,Rows,Columns)|ExcelマクロVBA入門
5.変数とデータ型(Dim)|ExcelマクロVBA入門
6.セルのコピー&値の貼り付け(PasteSpecial)|ExcelマクロVBA入門
7.セルの参照範囲を可変にする(OFFSET,COUNTA,MATCH)|エクセル関数超技
8.ひらがな⇔カタカナの変換|エクセル基本操作
9.定数と型宣言文字(Const)|ExcelマクロVBA入門
10.CSVの読み込み方法|ExcelマクロVBAサンプル集



  • >
  • >
  • >
  • 別のシートにコピーする2

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


    記述には細心の注意をしたつもりですが、
    間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
    なお、掲載のVBAコードは自己責任で使ってください。万一データ破損等の損害が発生しても責任は負いません。

    ↑ PAGE TOP