更新日:、 作成日:
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 ' コピーモードを解除
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 メソッドを実行すると、そのセルがコピーモードになるためです。これを解除しています。
一部の書式をコピー
すべての書式をコピーしないで、背景色など一部の書式だけコピーするには、そのプロパティを直接設定します。
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
セルの範囲「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 のセル「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 = "アクティブ"
スポンサーリンク