Excel VBA(マクロ)で列幅と行の高さを同じくする、セルを正方形・方眼紙・升目状にする方法

electronics IT

VBAを使ってExcelの横/縦を同じ幅にする方法です。

スポンサーリンク

①行の高さを列幅と一致させる

行の高さはRowHeight
列幅はColumnWidth変更でき、
どちらもポイント単位となります。
行の高さはRowHeightHeight
列幅はColumnWidthWidth取得でき、
ColumnWidthのみ文字数単位、それ以外はポイント単位となります。
ということは、Rows(1).RowHeight = Columns(1).Widthとしてやれば、
Widthで取得した列幅(ポイント単位)の数値がRowHeightの行の高さ(ポイント単位)に代入されるため、行の高さを列幅に合わせることが可能となります。
' vba
'正方形の一辺の長さ(ポイント単位)
Columns(1).ColumnWidth = 10
' 列幅と行の高さを一致させる
Rows("1").RowHeight = Columns(1).Width
' Rangeから指定することもできる
Range("A1").RowHeight = Columns(1).Width

範囲/シートを升目状にする

範囲を升目状にするのは上の延長です。
例としてA1:J10を升目状にするなら、予めA1の列幅を好きなサイズにしておき、以下のコードを実行します。
' vba
' 1列目の列幅と1~10行目の高さを一致させる
Rows("1:10").RowHeight = Columns(1).Width
' 1列目の列幅と1~10列目の幅を一致させる
Columns("A:J").ColumnWidth = Columns(1).ColumnWidth
実行結果です。
' vba
Rows.RowHeight = Columns(1).Width
Columns.ColumnWidth = Columns(1).ColumnWidth
範囲指定を外せば、
シートをまるごと全部升目状にすることも可能です。

失敗例

Rows(1).RowHeight = Columns(1).ColumnWidthだとダメ。文字数単位で取得した列幅の数値をポイント単位の行の高さに代入するので、こういうことになります。
同じ理由でColumns(1).ColumnWidth = Rows(1).RowHeightなどもダメ。RowHeightまたはHeightで取得できるのはポイント単位で換算した数値なので、それを文字数単位のColumnWidthに代入しても列幅と行の高さが一致しません。

②ピクセル換算で指定する

100ピクセルで「大体」75ポイント、デフォルトの文字数で言うと11.88になるので、
' vba
Rows(1).RowHeight = 30 * 0.75
Columns(1).ColumnWidth = 30 * 0.1188
MsgBox Rows(1).RowHeight & " " & Columns(1).Width
正方形の一辺の長さに高さは0.75、幅は0.1188をかけてやれば、
大体正方形になりますが、近似値なので多少数値に誤差が出ます。

範囲/シートを升目状にする

①と同じように、選択範囲を変えることで方眼紙にする範囲を変更できます。
下のコードでは辺の長さを変数で管理し、一括で入力できるようにしています。
' vba
Dim 一辺の長さ As Integer
一辺の長さ = 30
Rows("1:10").RowHeight = 一辺の長さ * 0.75
Columns("A:J").ColumnWidth = 一辺の長さ * 0.1188
Excel(エクセル):行、列
Excelの行、列関係操作、関数、VBAです。他のまとめとかぶる部分が多い場合はリンク貼ります。 行・列の選択 行・列の選択方法です。 テーブル内の行・列一括選択方法です。 VBA(マクロ)で列・...
やりたいことから方法を探すエクセル(Excel)操作・関数・VBA(マクロ)逆引きまとめ
逆引き(やりたいことから探す)Excel記事まとめ

コメント

モバイルバージョンを終了