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



最終更新日:2013-02-18

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



前回作成した100マスを別のシートにコピーしてみましょう。


ここでは、「Sheet1」に100マスがあり、それを「Sheet2」へコピーします。


いまは、「Sheet1」が開いていて、セルA1がアクティブになっています。


1.マクロの記録

2.A1〜J10を選択

3.コピー

4.「Sheet2」を選択

5.セルA1を選択

6.貼り付け

7.記録終了


作成されたマクロは、


Sub Macro2()
'
' Macro2 Macro
'

'
  Range("A1:J10").Select
  Selection.Copy
  Sheets("Sheet2").Select
  Range("A1").Select
  ActiveSheet.Paste
End Sub


この5行は、上の「マクロの記録」の、2.〜6.にそれぞれ該当しています。

1つの操作が1行の記述になっています。


Sheets("Sheet2").Select

これは初めて出てきました。

Sheets(シート名)

これで、シート名のシートを指します。

そして、Select

これは、RangeのSelectと同じで、そのシートをアクティブにします。

つまり、そのシートを開いた状態にします。



では、「Sheet2」のA1〜J10が選択されている状態で「Delete」して下さい。

全部消えましたよね。


そして、その状態で、再度このマクロを実行して下さい。


何か変ですよね。

「Sheet2」のA1〜J10にコピーの点々が付いていて、100マスがコピーされません。


Range("A1:J10").Select
このような、RangeやCellsは、アクティブなシート(今開いているシート)のセルを指しています。


マクロを記録する時点で、「Sheet1」がアクティブだったので、

Sheets("Sheet1").Select
この記述が漏れているのです。

では、これを先頭に追加して、再度実行して下さい。


Sub Macro2()

  Sheets("Sheet1").Select
  Range("A1:J10").Select
  Selection.Copy
  Sheets("Sheet2").Select
  Range("A1").Select
  ActiveSheet.Paste
End Sub


ちゃんとコピーされましたよね。



では、恒例の消しこみです。


今までの例で行けば、

Select、Selection、ActiveSheet、ActiveCell

は消せる事がわかります、これらを消してつなげると、


Sub Macro2()

  Sheets("Sheet1").Range("A1:J10").Copy
  Sheets("Sheet2").Range("A1").Paste
End Sub


では実行して下さい。


何か、エクセルが怒っていますよね。




とても、冷たいお言葉をエクセルから頂きましたね。(笑)


「デバッグ」を押して下さい。


Sheets("Sheet2").Range("A1").Paste
の行が、黄色になっています。


つまり、この行はダメだと、エクセルが言っているのです。


逆に考えれば、1行目は良いとも言っています。


この状態を解除するには、


メニューの「実行」→「リセット」です。


では、何がどうダメなのでしょうか。


エクセルは不親切です、そこまで教えてくれません。


Pasteは、

シート.Paste

としか記述できないのです。


ですから、

Sheets("Sheet2").Select
Range("A1").Select
ActiveSheet.Paste
この部分は、省略できないのです。


つまり、

Sub Macro2()

  Sheets("Sheet1").Range("A1:J10").Copy
  Sheets("Sheet2").Select
  Range("A1").Select
  ActiveSheet.Paste
End Sub


となります。



では、次は、値の貼り付けをやってみましょう。


「Sheet2」がアクティブな状態で、全て消しておきます。


1.マクロの記録

2.A1〜J10を選択

3.コピー

4.「Sheet2」を選択

5.セルA1を選択

6.「形式を選択して貼り付け」→「値」→「OK」

7.記録終了


作成されたマクロは、


Sub Macro3()
'
' Macro3 Macro
'

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


太字の部分が変わりましたよね。


まず、

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False

の、最初の行の最後の部分の「 _」ですが、行の継続をしています。

つまり、1行だと長くなりすぎる場合に、複数行に分けて書くことが出来るのです。

空白1つあけて、「_」(アンダーバー)です。


そして、これが、値の貼り付けになります。


では消しこみをしましょう。


と言っても、最初の3行は、前と同じですし、後半は省略出来ない・・・


いいえ、この場合は省略できるのです。


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

行継続の位置をずらしてあります。


先ほどは、

Sheets("Sheet2").Range("A1").Paste

は、エクセルにダメだと言われたのですが、

Sheets("Sheet2").Range("A1").PasteSpecial

は、エクセルが「いいよ」と言ってくれます。


何故かって、・・・私に聞かないで・・・エクセルに聞いて(笑)

これと言った根拠は無いと思います、エクセルを作った人が、たまたまそうしたのだとしか言えません。

この件に関しては、そういうものだと覚えて下さい。



次回は、「.Copy」を使わずに、別の方法で、値をコピーしてみましょう。


いよいよ、VBAの深みに入っていきます。


ここが最初の山場です。


初心者のかなり多くが、ここを理解していないのです。


従って、応用が利かない。


セルの値をコピーする。


いたって基本であり、最も頻繁に使用するはずなのに、


ここの理解が足りていないのです。



これは、入門書と言われる書籍に問題があるのかも知れません。

(すみません、入門書は読んだ事ないので、はっきりとは言えません)


著者は当然分かっているのでしょうが、初心者を混乱させまいとして、


必要最小限の事しか書いていないのです。


しかし、先の原発問題もそうですが、情報不足はかえって危険な事もあります。


ここまで、私も初心者に不要と思われる事は、説明を省略してきました。


しかし、セルの値をコピーするという、極めて基本で重要な事は、しっかり説明します。


これを理解せずして、VBAの理解などあり得ないし、活用などできはしません。






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

第7回.別のシートにコピーする2
第8回.計算式を入れる
第9回.計算式をコピーする
第10回.計算結果を入れる
第11回.イミディエイトで値の確認
第12回.セルに色を塗る
第13回.罫線を引く

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

データクレンジングと名寄せ|ExcelマクロVBA技術解説(10月20日)
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日)

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

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



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

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


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

    ↑ PAGE TOP