Home » Excel VBA Rangeオブジェクト » 行・列を表すRange » VBAで列幅をコピーする

対象:Excel2007, Excel2010, Excel2013, Windows版Excel2016

VBAで列幅をコピーする

このサイト・インストラクターのネタ帳のアクセスログを眺めていて
「excel vba 列幅 コピー」
「エクセル vba 列幅のコピー」
といった検索キーワードに気づきました。

[スポンサードリンク]

列幅をコピーするサンプルマクロ

[形式を選択して貼り付け]ダイアログで[列幅]を指定して貼り付けする操作をマクロ記録すると、
 Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
  SkipBlanks:=False, Transpose:=False
といったコードが作られます。

このRangeオブジェクトのPasteSpecialメソッドを使った、

VBAで列幅をコピーする

以下のSubプロシージャを実行すると、C:H列の列幅が、A列と同じになります。
Sub 列幅をコピーする()
 Columns("A").Copy
 Columns("C:H").PasteSpecial xlPasteColumnWidths
 Application.CutCopyMode = False
End Sub

サンプルマクロの解説

[形式を選択して貼り付け]ダイアログで[列幅]を指定して貼り付けする操作のマクロ記録でできた、
 Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
  SkipBlanks:=False, Transpose:=False
といったコードで、列幅の貼り付けに必要なのは、引数・Pasteに指定された、定数・xlPasteColumnWidthsの部分で、

VBAで列幅をコピーする

他の引数は不要なので、上記プロシージャでは削除しています。

定数名・xlPasteColumnWidthsから、何を指定しているのか意味はわかりますから、名前付き引数ではなく標準引数にしています。

実際に必要な処理は、
 Columns("A").Copy
 Columns("C:H").PasteSpecial xlPasteColumnWidths
だけですが、このままだとExcelでコピーを行った直後の状態となるので、
 Application.CutCopyMode = False
を入れています。

[スポンサードリンク]

Home » Excel VBA Rangeオブジェクト » 行・列を表すRange » VBAで列幅をコピーする

「行・列を表すRange」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.