マクロ記録でVBA
計算式をコピーする

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

第9回.計算式をコピーする


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


第6回、第7回の内容とほぼ同様になります。


エクセルVBAでは、このシート間のデータコピーが最もよく行われる事の1つであり、


VBAの基本でもあります。


今回は、確認を含めて、さらに1歩進んだ説明をします。



では、さっそく「マクロの記録」からです。


Sheet1全セルをSheet2にコピーします。


最初は、Sheet2が選択された状態から、


1.マクロの記録

2.Sheet1を選択

3.全セルを選択

4.コピー

5.「Sheet2」を選択

6.セルA1を選択

7.貼り付け

8.記録終了


作成されたマクロです。


Sub Macro1()
'
' Macro1 Macro
'

'
  Sheets("Sheet1").Select
  Cells.Select
  Selection.Copy
  Sheets("Sheet2").Select
  Range("A1").Select
  ActiveSheet.Paste
  Range("B2").Select
End Sub


恒例の消しこみです。


Sub Macro1()

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


ここまでは良いですね。


全セルの指定が、Cellsである事くらいでしょうか。


この場合は、Rangeではないのです、Cellsで、()の指定をしません。


この結果は、Sheet1とSheet2は同じ内容になります。



では、計算式はコピーせずに、計算結果のみコピーするには、どうすれば良いでしょうか。


そうですね、値のコピーをすれば良いです。


でも、書式はコピーしたいので、計算式が入っている部分のみ値をコピーしましょう。


これは、マクロの記録をしなくても、良いですね。


第6回で既に作成したマクロの、コピー範囲だけ直せば完成します。




Sub Macro2()
  Sheets("Sheet1").Range("B2:K11").Copy
  Sheets("Sheet2").Range("B2").PasteSpecial _
    Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End Sub


太字の部分が、前回作成したマクロとの違いです。


Rangeの範囲だけの違いです。


以上の2つのマクロを実行すると、書式が全て同じで、


計算式の入っているセルのみ、直接値の入ったシートが作成されました。



では、この値のコピーを、「.COPY」を使わずにコピーしてみましょう。


これも既に、作成済みのマクロの、セル範囲の変更になります。


Sub Macro4()
  Dim i
  Dim j
  i = 2
  Do While i <= 11
    j = 2
    Do While j <= 11
     Sheets("Sheet2").Cells(i, j).Value = Sheets("Sheet1").Cells(i, j).Value
     j = j + 1
    Loop
    i = i + 1
  Loop
End Sub


太字の部分に注意して下さい。


以前は、1~10のループでしたが、


今回は、2~11のループになっています。


1~10のループで記述すれば、




Sub Macro4()
  Dim i
  Dim j
  i = 1

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


太字の部分の違いになります。


この2つは、どちらでも、好みで使い分ければ良いでしょう。


ループする回数を基準に考えるか、セルの行列位置を基準に考えるかの違いです。



では、さらに、「.COPY」を使わずに、計算式をコピーする場合は、どうしたら良いでしょう。


計算式をR1C1形式で入れる場合は、


FormulaR1C1


を使用することを説明しました。


Value


の代わりに、これを指定すれば良いのです。


Sheets("Sheet2").Cells(i, j).FormulaR1C1 = Sheets("Sheet1").Cells(i, j).FormulaR1C1


これで、計算式がコピーされます。


実際にマクロを実行して、動作を確認して下さい。


セルのコピー、値のコピーは覚えられたでしょうか。


これが出来ないと、VBAが始まりませんので、しっかり覚えて下さい。


次回は、VBAで計算した結果を、セルに入れてみましょう。





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

第6回.別のシートにコピーする
第7回.別のシートにコピーする2
第8回.計算式を入れる
第9回.計算式をコピーする
第10回.計算結果を入れる
第11回.イミディエイトで値の確認
第12回.セルに色を塗る
第13回.罫線を引く
第14回.行列を入れ替えて貼り付け
第15回.いろいろな消去
第16回.行の挿入・削除


新着記事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」をお願いいたします。
本文下部へ