PR

【VBA】行高さ・列幅をユーザーフォームを利用して変更する

これで楽に!?VBA活用
記事内に広告が含まれています。

こんにちは、Ryoです。
行の高さや列幅を変更・取得するにはRowHeight/ColumnWidthプロパティで行いますが、シート全体や選択範囲を簡易的に設定できるようユーザーフォームを利用してみましたので今回はその内容について書いていきます。

スポンサーリンク

1.サンプル概要

今回扱うUserForm1の構成は以下の通りです。LabelやTextBoxのフォントや文字位置設定などは適宜設定いただければ大丈夫です。

Row(行)設定値、Columns(列)設定値にそれぞれ数値を入力して「セル全体へ設定」ボタンをクリックすればシート全体のセルへ設定されます。

「選択範囲で設定」は手動でセルを選択した範囲に対し、それぞれのテキストボックスに入力された値を使用して行の高さと列幅を設定するものです。

「全体初期化」や「選択範囲リセット」は言葉通り、行の高さと列幅をデフォルト値に戻すものになります。

これらの一連の動作は以下のようになっています。

 

以上がサンプル概要になります。

2.サンプルコード

◆CommandoButton1:セル全体へ設定

Private Sub CommandButton1_Click()

'セル全体の行高さ、列幅を指定値で変更する
' →Sheet全体に作用

 With Cells
   '行高さをテキストボックス1の値に設定
   .RowHeight = Me.TextBox1.Value
   '列幅をテキストボックス2の値に設定
   .ColumnWidth = Me.TextBox2.Value
 End With
 
End Sub

対象Sheetのセル全体へ適用する場合はCells.RowHeight/ColumnWidth=値で指定すればOKです。

◆CommandButton2:選択範囲で設定

Private Sub CommandButton2_Click()

 Dim a As String
 Dim n1, n2, n3, n4 As Long

 '指定範囲に対して左上と右下のセルを読み、
 'その範囲で指定値を使って行高さと列幅を設定する
  a = Selection(1).Address(False, False)
  n1 = Range(a).Row '行の始点
  n2 = Range(a).Column  '列の始点
 
  b = Selection(Selection.Count).Address(False, False)
  n3 = Range(b).Row  '行の終点
  n4 = Range(b).Column  '列の終点
 
 '上で求めた選択範囲に対してテキストボックス入力値を
 '行高さと列幅にそれぞれ設定する
 With Range(Cells(n1, n2), Cells(n3, n4))
   .RowHeight = Me.TextBox1.Value
   .ColumnWidth = Me.TextBox2.Value
 End With
 
End Sub

セル範囲を任意で選択し、その範囲に対して実行するので位置を特定する必要がありますのでSelectionプロパティを利用します。

Selection(1)=選択範囲の左上、Selection.Countは選択範囲の右下の位置になりますのでSelection(Selection.Count)とすることでそれぞれのアドレスを取得できます。

後はそれぞれ行・列の位置を数値で取得して選択されている範囲を特定し、その範囲に対してRowHeight/ColumnWidthプロパティで処理を実行しています。

◆CommandButton3:全体初期化

Private Sub CommandButton3_Click()

 With Cells
   .RowHeight = 12
   .ColumnWidth = 8.43
 End With
 
End Sub

対象Sheetの全セルに対し、デフォルト値を設定することで初期化しています。

◆CommandButton4:選択範囲リセット

Private Sub CommandButton4_Click()

 Dim a As String
 Dim n1, n2, n3, n4 As Long

  a = Selection(1).Address(False, False)
  n1 = Range(a).Row '行の始点
  n2 = Range(a).Column  '列の始点
 
  b = Selection(Selection.Count).Address(False, False)
  n3 = Range(b).Row  '行の終点
  n4 = Range(b).Column  '列の終点
 
 With Range(Cells(n1, n2), Cells(n3, n4))
   .RowHeight = 12
   .ColumnWidth = 8.43
 End With

End Sub

処理としてはCommandButton2と同様で位置を特定し、その範囲に対してデフォルト値を設定することでリセットする形としています。

◆標準モジュール

Sub sample1()

 UserForm1.Show vbModeless

End Sub

ユーザーフォーム表示中にセル側の操作をしたい場合は.Show vbModelessで実行することでフォーム表示中であってもセル側の操作を行うことができます。

3.まとめ

用途によってはセルの行や列に対して操作する頻度が高いこともあるので、私はアドインとして組み込んで使ったりしています。



シート全体に対する設定はCells.で指定するので特に問題ありませんが、指定範囲等に対して処理したい場合の範囲を取得するにはSelectionプロパティがとても有用なので知っておくと役に立つと思います。

以上、行高さ・列幅をユーザーフォームを利用して変更する方法についてでした!今回の記事が何かの参考になれば幸いです。

Ryo

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