VBA セルの書式をコピーする (Range.Copy)

はじめに

Excel VBA マクロでセルの書式をコピーする方法を紹介します。

Range("B1").Copy または Cells(1, 2).Copy メソッドから、セル「B1」をコピーできます。

PasteSpecial メソッドから、セルに書式や条件付き書式を貼り付けできます。

セルを範囲指定するすべての方法は「セルを範囲指定して取得する」をご覧ください。
  • 目次
    • セルの書式をコピーする
    • セルの範囲の書式をコピーする
    • 条件付き書式をコピーする
    • 別シートのセルの書式をコピーする

セルの書式をコピーする

Excel で書式をコピーするのと同じ手順で、セルをコピーしてから書式を貼り付けます。

Range の引数にセル名を指定すると、そのセルの書式をコピーできます。

セル「A1」をコピーするには Range("A1").Copy を入力します。

セル「B1」に書式を貼り付けるには Range("B1").PasteSpecial(xlPasteFormats) を入力します。

Range("A1").Copy                          ' セルをコピー
Range("B1").PasteSpecial (xlPasteFormats) ' 書式を貼り付け
Application.CutCopyMode = False           ' コピーモードを解除
3

Cells の引数にセルの行と列の番号を指定すると、そのセルの書式をコピーできます。

行「2」、列「A」をコピーするには Cells(2, 1).Copy を入力します。

行「2」、列「B」に書式を貼り付けるには Cells(2, 2).PasteSpecial(xlPasteFormats) を入力します。

Cells(1, 1).Copy ' A1
Cells(1, 2).PasteSpecial (xlPasteFormats) ' B1
Cells(2, 1).Copy ' A2
Cells(2, 2).PasteSpecial (xlPasteFormats) ' B2
Application.CutCopyMode = False

xlPasteFormats を指定して書式だけを貼り付けられます。

書式以外を貼り付けるには「セルをコピーする」をご覧ください。

Application.CutCopyMode に False を設定しているのは、Copy メソッドを実行すると、そのセルがコピーモードになるためです。これを解除しています。

2

一部の書式をコピー

すべての書式をコピーしないで、背景色など一部の書式だけコピーするには、そのプロパティを直接設定します。

Range("B1").Font.Color = Range("A1").Font.Color         ' 文字色をコピー
Range("B1").Interior.Color = Range("A1").Interior.Color ' 背景色をコピー

Range("B1").Borders(xlEdgeTop).LineStyle = Range("A1").Borders(xlEdgeTop).LineStyle       ' 上側の罫線をコピー
Range("B1").Borders(xlEdgeBottom).LineStyle = Range("A1").Borders(xlEdgeBottom).LineStyle ' 下側の罫線をコピー
Range("B1").Borders(xlEdgeLeft).LineStyle = Range("A1").Borders(xlEdgeLeft).LineStyle     ' 左側の罫線をコピー
Range("B1").Borders(xlEdgeRight).LineStyle = Range("A1").Borders(xlEdgeRight).LineStyle   ' 右側の罫線をコピー
書式については「セルの書式設定を取得または設定する」をご覧ください。

セルの範囲の書式をコピーする

セルの範囲「A1」~「B2」をコピーするには Range("A1:B2").Copy または Range("A1", "B2").Copy を入力します。

Range("A1:B2").Copy
Range("A1", "B2").Copy

Range("A3").PasteSpecial (xlPasteFormats) ' セルの範囲の書式を貼り付け
' A1 → A3 に貼り付け
' A2 → A4 に貼り付け
' B1 → B3 に貼り付け
' B2 → B4 に貼り付け
Application.CutCopyMode = False
4

セルの範囲「A1」~「B2」を「A3」に貼り付けると、セルの範囲「A3」~「B4」に貼り付けられます。これは Excel の操作と同じです。

条件付き書式をコピーする

コピーの仕方は上記の方法と同じです。注意するのは条件の中にセル参照が含まれているときに、絶対参照にしていないと参照先がずれます。また貼り付けするセルの範囲にコピー元のセルが含まれていないと、条件付き書式が 2 つになり適用先が分かれます。

これは Excel で条件付き書式をコピーしたときと同じです。

Range("A1").Copy ' 適用先が =$A$1 の条件付き書式をコピー
' コピー元のセルを含めないと適用先が =$A$1 と =$A$2 の 2 つの条件付き書式になる
Range("A2").PasteSpecial (xlPasteFormats)
' コピー元のセルを含めると適用先が =$A$1:$A$2 の 1 つの条件付き書式になる
Range("A1:A2").PasteSpecial (xlPasteFormats)
Application.CutCopyMode = False
詳しくは「エクセル 条件付き書式をコピーする」をご覧ください。

適用先だけを変更するには FormatCondition.ModifyAppliesToRange を入力します。

Call Range("A1").FormatConditions(1).ModifyAppliesToRange(Range("$A$1:$A$2"))

別シートのセルの書式をコピーする

シートを指定するには Worksheets の引数にシート名またはインデックスを指定します。

Sheet1 を指定するには Worksheets("Sheet1") または Worksheets(1) を入力します。

sheet1
' Sheet1 のセル「A1」の書式をコピー
Worksheets("Sheet1").Range("A1").Copy
Worksheets("Sheet1").Range("B1").PasteSpecial (xlPasteFormats)
Worksheets(1).Range("A1").Copy
Worksheets(1).Range("B1").PasteSpecial (xlPasteFormats)

' Sheet2 のセル「A1」の書式をコピー
Worksheets("Sheet2").Range("A1").Copy
Worksheets("Sheet2").Range("B1").PasteSpecial (xlPasteFormats)
Worksheets(2).Range("A1").Copy
Worksheets(2).Range("B1").PasteSpecial (xlPasteFormats)

Sheet1 に Range や Cells を入力すると、自身のシートのセルになります。自身を表す Me. が省略されています。

' どちらも同じコード
Range("A1").Value = "Sheet1"
Me.Range("A1").Value = "Sheet1"

標準モジュールに Range や Cells を入力すると、開いているシートのセルになります。アクティブシートを表す ActiveSheet. が省略されています。

' どちらも同じコード
Range("A1").Value = "アクティブ"
ActiveSheet.Range("A1").Value = "アクティブ"