サイトについて      連絡先   検索

VBA セルの書式をコピーする

はじめに

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

Range.Copy メソッドまたは Cells.Copy メソッドでセルをコピーできます。

Range.PasteSpecial メソッドまたは Cells.PasteSpecial メソッドで書式を貼り付けできます。

形式を選択して貼り付け

Excel の「形式を選択して貼り付け」と同じ操作で書式だけを貼り付けできます。

1
  • 目次
    • セルの書式をコピーする
    • セルの範囲の書式をコピーする
    • 指定したシートのセルの書式をコピーする

セルの書式をコピーする

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)を入力します。


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

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

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

2

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

セルの範囲「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 に貼り付け
4

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

指定したシートのセルの書式をコピーする

シートを指定するには 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 = "アクティブ"
  • 目次
    • セルの書式をコピーする
    • セルの範囲の書式をコピーする
    • 指定したシートのセルの書式をコピーする