Excel VBA 逆引き集 | 書式だけコピー

Excel VBA
スポンサーリンク

ねらい:書式だけコピーするとは?

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").Copyws.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. まずは1セルで試す: CopyFormatOnly を実行して、A1の書式がB1にコピーされるか確認。
  2. 次に範囲で試す: CopyFormatRange を実行して、A1:A10の書式がB1:B10にコピーされるか確認。
  3. 最後に列全体で試す: ExampleInputFormat を実行して、A列の見た目がB列に反映されるか確認。

タイトルとURLをコピーしました