Excel VBA を使って式のコピーを行う

2023年4月15日

Excel VBAを使った表作成において、式のコピーは非常に便利な機能です。表の自動化を考える上で、重要なスキルといえるでしょう。本記事では、Excel VBAを使って式のコピーを行う方法について、詳しく解説します。
まず、Excel VBAを使った式のコピーには、Copyメソッドを使用します。Copyメソッドは、Rangeオブジェクトを指定して、指定したセルの内容をクリップボードにコピーします。以下は、Copyメソッドの基本的な使い方です。
  Range(“コピー元のセル").Copy Destination:=Range(“コピー先のセル")
このコードを使用することで、指定したセルの内容がクリップボードにコピーされ、その内容を別のセルに貼り付けることができます。詳細につきましては以下をご覧ください。

サンプルアプリの使い方

このサンプルアプリでは、下の絵にある「合計欄の式をコピー」ボタンをクリックすると、E6セルに入っている式(=C6*D6)が下の欄にコピーされます。コピーされた式によって自動的に合計欄に数字が入ります。

式が入ると合計欄が自動計算され下のように数字が入ります。

Copyメソッド処理内容

Copyメソッドは、RangeオブジェクトのCopyメソッドと引数「Destination」を使用することで、式を簡単にコピーすることができます。以下のコードを使って、貼り付け先のセル範囲を指定します。

 wS.Range(“コピー元のセル").Copy Destination:=wS.Range(“コピー先のセル")

もし引数を省略すると、コピーしたセル範囲がクリップボードに格納されます。そのため、別途PasteメソッドあるいはPasteSpecialメソッドを使用して、貼り付けるためのコードを記述する必要があります。
コピーした後は、コピーしたセル範囲がクリップボードに残り、貼り付け先を選択する前に何らかの操作を行ってしまうと、誤った場所に貼り付けてしまう可能性があります。そのため、コピーが完了したら、クリップボードの内容を解除しておく必要があります。以下は、コピー状態を解除するコード例です。

  Application.CutCopyMode = False

RangeオブジェクトのCopyメソッドの詳しい解説については下記リンク先をご覧ください。
 https://learn.microsoft.com/ja-jp/office/vba/api/excel.range.copy

サンプルアプリのコード   アプリの作成手順はこちら

Option Explicit

Sub ボタン1_Click()

  'データ最終行を入れる変数を定義
   Dim myLast As Long

  'シート名を入れる変数の定義
   Dim wS As Worksheet
   
  '変数 wS にシート名「Sheet1」をセット
   Set wS = Worksheets("Sheet1")
   
  'データ最終行(電源ケーブルのセル)を取得
   myLast = wS.Cells(Rows.Count, 2).End(xlUp).Row

  'E6セルにセットした式をE7~E16セルまでコピー
   wS.Range("E6:E6").Copy Destination:=wS.Range("E7:E16")
    
  '17行目の合計欄に式をセット
   wS.Cells(myLast + 1, 5) = "=SUM(E6:E16)"
    
  'コピーモードを解除
   Application.CutCopyMode = False
   
  'E17のセルを選択して終了
   Range("E17").Select
    
End Sub