ねらい:書式だけコピーするとは?
Excelで「セルの値はそのままにして、書式だけを別のセルにコピーしたい」場面はよくあります。例えば、見た目(フォント、色、罫線)は揃えたいが、数値や文字は変えたくないときです。初心者が混乱しやすいのは「値と書式が一緒にコピーされてしまう」こと。ここでは 書式だけコピーする方法 を VBA で分かりやすく解説します。
基本テンプレート:PasteSpecial を使う
Sub CopyFormatOnly()
Dim ws As Worksheet
Set ws = Worksheets("Sheet1")
' コピー元とコピー先を指定
ws.Range("A1").Copy
ws.Range("B1").PasteSpecial Paste:=xlPasteFormats
Application.CutCopyMode = False
End Sub
VB重要ポイント(深掘り)
PasteSpecialの役割:xlPasteFormatsを指定すると「書式だけ」が貼り付けられる。- 値や数式はコピーされない。
Application.CutCopyMode = False:- コピー状態を解除して、選択範囲が点滅しないようにする。
- 初心者が「コピー状態が残っていて邪魔」と感じる部分を解消。
応用テンプレート:範囲全体の書式をコピー
Sub CopyFormatRange()
Dim ws As Worksheet
Set ws = Worksheets("Sheet1")
' A列の書式をB列へコピー
ws.Range("A1:A10").Copy
ws.Range("B1:B10").PasteSpecial Paste:=xlPasteFormats
Application.CutCopyMode = False
End Sub
VB重要ポイント(深掘り)
- 範囲サイズは一致させる:
- コピー元とコピー先の範囲サイズを揃えると、ズレなく書式がコピーされる。
- 部分的にコピー:
- 例えば「列全体」「行全体」にも応用可能。
ws.Columns("A").Copy→ws.Columns("B").PasteSpecial xlPasteFormats
例題:入力欄の見た目を統一する
シナリオ
- Sheet1 の A列に「入力欄」があり、背景色が黄色。
- B列にも入力欄を作りたいが、値は空白のまま、見た目だけ揃えたい。
コード例
Sub ExampleInputFormat()
Dim ws As Worksheet
Set ws = Worksheets("Sheet1")
' A列の書式をB列へコピー
ws.Columns("A").Copy
ws.Columns("B").PasteSpecial Paste:=xlPasteFormats
Application.CutCopyMode = False
MsgBox "B列の入力欄の書式をA列と同じにしました。"
End Sub
VB解説
- 背景色や罫線がコピーされる: 値は空白のまま。
- ユーザー体験: 「入力欄の見た目が統一されている」ことで操作性が向上。
実務の落とし穴と対策
- 落とし穴1:値までコピーされてしまう
- 対策: 必ず
PasteSpecial xlPasteFormatsを使う。
- 対策: 必ず
- 落とし穴2:範囲サイズが違う
- 対策: コピー元とコピー先の範囲サイズを一致させる。
- 落とし穴3:コピー状態が残る
- 対策:
Application.CutCopyMode = Falseを最後に入れる。
- 対策:
- 落とし穴4:書式だけでは足りない場合
- 対策: 必要なら「列幅」や「条件付き書式」も別途コピーする。
スターター手順
- まずは1セルで試す:
CopyFormatOnlyを実行して、A1の書式がB1にコピーされるか確認。 - 次に範囲で試す:
CopyFormatRangeを実行して、A1:A10の書式がB1:B10にコピーされるか確認。 - 最後に列全体で試す:
ExampleInputFormatを実行して、A列の見た目がB列に反映されるか確認。
