エクセル

VBA コピーの方法3選

コピーはマウス、キーボード操作でも日常的によく使用しますね。別シートにあるセルをコピーする場合のVBAでの記載方法の紹介です。

VBAで記載するとどのような記載をすればよいのか、見てみましょう!

この記事でわかること
  1. マウス、キーボード操作の動きをコード化
  2. Copyを使用する
  3. セルの値のみをコピー

やりたいこと

今回やりたいことは、Sheet1のB2~B5の範囲の値をSheet2のB2~B5にコピーする、です。。B3のセルは橙色の書式となっています。書式ごとコピーする方法①②とセルの値のみをコピーする方法③について紹介します。

コード記述例

マウス、キーボード操作の動きをコード化

まずは、マウス、キーボード操作の手順をそのままコード化してみます。
手作業でコピーする場合、以下のような操作になりますね。

  1. コピー範囲(Sheet1のB2~B5)を選択し、コピー
  2. コピー先であるSheet2を選択
  3. 張り付けたいセル(Sheet2のB2)を選択し、貼り付け
  4. Sheet1を選択し、初めの状態に戻る

それをそのままコード化してみると、以下のようなになります。やりたいことを実現するために5行のコードが必要となりました。確かに、これでも動きとしては問題ありませんが、なんだがやりたいことに対してコードが大げさすぎる印象があります。
もっと、シンプルにコードを記載する方法はないのでしょうか?

Worksheets(“Sheet1”).Range(“B2:B5”).Copy
Worksheets(“Sheet2”).Select
Worksheets(“Sheet2”).Range(“B2”).Select
ActiveSheet.Paste
Worksheets(“Sheet1”).Select

②Copyを使用する

Copyの機能を利用することで5行必要だったコードが1行で記載することが可能です。コード例は以下の通りです。

左側にコピー元、右側にコピー先を記載することで使用します。コピー元に「.Copy」を付けることで使用できます。

1行当たりのコードが長くなりすぎて見にくい場合は、コードを途中で分割して2行で記載することも可能です。2行にしたい場合は、スペースとアンダーバーを記載して、改行します。

あまり長すぎるコードは見にくくなるので途中で改行したほうがよいですが、1行がよいのか、2行のほうが見やすいのかこのあたりは好みになりますね。

Worksheets(“Sheet1”).Range(“B2:B5”).Copy _
worksheets(“Sheet2”).Range(“B2:B5”)

③セルの値のみをコピー

セルの値のみをコピーする方法について紹介します。マウス操作でする場合は、形式を選択して貼り付けですが、この機能をコードでそのまま記載するとかなり複雑になってしまいます。ここでは、簡単に値のみをコピーする方法を紹介します。

Worksheets(“Sheet2”).Range(“B2:B5”).Value _
= Worksheets(“Sheet1”).Range(“B2:B5”).Value

「Value」はセルの中の値という意味です。コードの意味は、Sheet1のB2~B5の範囲の値(Value)をSheet2の B2~B5の範囲の値(Value) に代入(=)するという意味になります。
これでも、セルの中の値をコピーすることが可能です。

まとめ

マウス、キーボード操作の動きをそのままコード化しても機能としては実現できますが、コードが長くなり見にくく(可読性)が悪くなってしまいます。コードはシンプルにわかりやすく書くのが良いですね。

それでは、また!