列の幅と行の高さを変更する(3)
前回の「見積書の雛形をエクセルVBAで作ろう!(Part 3)」では列の幅をポイント値を使って変更していきました。 今日は行の高さを変更していきましょう。 エクセルの行の高さはもともとポイント値で設定する仕様になっていますので、前回の列幅の時のような文字数への変換は必要ありません。
今日書き込む部分も独立したSubプロシージャにしておきましょう。名前は「行高さを配列を使って変更する」にしましょうか。 ↓
オリジナル見積書ファイルの行高さを調べる
行高さを変更するにはそれぞれの行に対してポイント値を代入します。 まず代入したいポイント値を調べる為にオジリナルの見積書ファイルで行高さを調べます。 これも私がオリジナルを持っていますので私が調べます。みなさんのファイルでは調べなくて結構です。やり方だけ参考になさってください。
調べる方法は列幅調査のときと一緒ですので、詳しい解説は前にご紹介した「見積書の雛形をエクセルVBAで作ろう!(Part 2)」のページをご参照ください。
列幅(Width)を行幅(Height)に書き換えて調査します。行指定の為の変数iの位置も変わりますのでご注意ください。 構文は下記の通りです。↓
Option Explicit
Sub 行高さのポイント値を調べる()
' 新しいシートを最後尾に追加してリネーム
Worksheets.Add after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = "行高さポイント値調査"
' 見積書シートの1行から43行の行高さを取得して「行高さポイント値調査」のシートへ記入
Dim S1 As Worksheet '行高さ調査対象のシート
Dim S2 As Worksheet '結果を記入するシート
Dim i As Long 'カウンターの数字
Set S1 = Worksheets("表紙(雛形)") 'ワークシートを代入
Set S2 = Worksheets("行高さポイント値調査") 'ワークシートを代入
For i = 1 To 43 'カウンターの数字をセット
S2.Cells(i, 1).Value = S1.Cells(i, 1).Height '行高さポイントを別シートへ記入
Next
End Sub
この方法で調べた結果、行高さのポイント値は以下の通りとなりました。
1行目:5、2行目:52.5、3行目:19.5、4行目:18.5、5行目:18.5、
6行目:18.5、7行目:18.5、8行目:18.5、9行目:18.5、10行目:18.5
11行目:18.5、12行目:18.5、13行目:18.5、14行目:18、15行目:18.5
16行目:18.5、17行目:18、18行目:7.5、19行目:18.5、20行目:4.5
21行目:37.5、22行目:37.5、23行目:37.5、24行目:37.5、25行目:37.5
26行目:37.5、27行目:37.5、28行目:37.5、29行目:37.5、30行目:37.5
31行目:37.5、32行目:37.5、33行目:18.5、34行目:18、35行目:18、
36行目:8.5、37行目:18、38行目:18、39行目:18、40行目:18
41行目:18、42行目:18.5、43行目:5
全部で43行あります。
変数を宣言する
まずは変数を宣言します。今回は以下の変数を宣言しましょう。 ↓
' 変数の宣言 Dim rng As Range 'セルまたは行(データ型はオブジェクト型のRange) Dim pt As Variant 'ポイント値(配列で格納)(データ型はバリアント型のVariant) Dim i As Long '行番号(データ型は長整数型のLong)
Array関数を使って配列を代入する
まず、変数Ptにさきほど調べた43行分のポイント値を配列で代入します。
Array関数を使うのでしたね。↓
pt = Array(5,52.5,19.5,18.5,18.5,18.5,18.5,18.5,18.5,18.5,18.5,18.5,18.5,18,18.5,18.5,18,7.5,18.5,4.5,37.5,37.5,37.5,37.5,37.5,37.5,37.5,37.5,37.5,37.5,37.5,37.5,18.5,18,18,18.5,18,18,18,18,18,18.5,5) 'ポイント値を配列で代入
変数ptにポイント値の配列を代入出来ました。
格納した値を個別に呼び出す時の配列番号はゼロから始まるのをお忘れなく!
For~Next構文で43行の行高さ代入をする
次は設定行が43行ありますので行高さの代入を43回繰り返すFor~Next構文を書きます。 ↓
For i = 1 To 43 Set rng = Rows(i) 'セルまたは行を設定 rng.Rowheight = pt(i-1) '行高さを変数ptの配列番号を指定して代入 Next i
変数iのカウンターを行番号指定にも使っています。オブジェクト型の変数に代入をする時には先頭に「Set」と書かなければならない決まりでしたね。変数rngへ指定する行を代入しています。
行の指定はRows(行番号)であらわします。行番号指定に変数iを利用しているわけですね。
行高さのポイント値を代入するには「Rows」(行の集合体コレクション)の数あるプロパティの中から「.Rowheight」(行高さのポイント値)を指定して代入します。
格納された配列を呼び出す時の番号はゼロから始まるので、1行目の時は0、2行目の時は1になります。ですので変数ptの格納番号をpt(i-1)として指定しています。
纏めてみましょう。 ↓
Sub 行高さを配列を使って変更する()
' 変数の宣言
Dim rng As Range 'セルまたは行(データ型はオブジェクト型のRange)
Dim pt As Variant 'ポイント値(配列で格納)(データ型はバリアント型のVariant)
Dim i As Long '行番号(データ型は長整数型のLong)
pt = Array(5, 52.5, 19.5, 18.5, 18.5, 18.5, 18.5, 18.5, 18.5, 18.5, 18.5, 18.5, 18.5, 18, 18.5, 18.5, 18, 7.5, 18.5, 4.5, 37.5, 37.5, 37.5, 37.5, 37.5, 37.5, 37.5, 37.5, 37.5, 37.5, 37.5, 37.5, 18.5, 18, 18, 18.5, 18, 18, 18, 18, 18, 18.5, 5) 'ポイント値を配列で代入
For i = 1 To 43
Set rng = Rows(i) 'セルまたは行を設定
rng.RowHeight = pt(i - 1) '行高さを変数ptの配列番号を指定して代入
Next i
End Sub
変数Ptに配列を代入する行がとても長くて横にスクロールしなければ見えませんね。。。
こういう場合は見にくいので途中で改行したいです。 改行させてもらえる方法があります!
改行したい場所に半角スペースと半角アンダーバー( _ )を入れれば改行できます。
ただし、この半角アンダーバー( _ )の後ろにはコメントも含めて何も書けません。
改行を入れるとこうなります。 ↓
Sub 行高さを配列を使って変更する()
' 変数の宣言
Dim rng As Range 'セルまたは行(データ型はオブジェクト型のRange)
Dim pt As Variant 'ポイント値(配列で格納)(データ型はバリアント型のVariant)
Dim i As Long '行番号(データ型は長整数型のLong)
pt = Array(5, 52.5, 19.5, 18.5, 18.5, 18.5, 18.5, 18.5, 18.5, 18.5, 18.5, _
18.5, 18.5, 18, 18.5, 18.5, 18, 7.5, 18.5, 4.5, 37.5, 37.5, 37.5, 37.5, 37.5, _
37.5, 37.5, 37.5, 37.5, 37.5, 37.5, 37.5, 18.5, 18, 18, 18.5, 18, 18, 18, 18, _
18, 18.5, 5) 'ポイント値を配列で代入
For i = 1 To 43
Set rng = Rows(i) 'セルまたは行を設定
rng.RowHeight = pt(i - 1) '行高さを変数ptの配列番号を指定して代入
Next i
End Sub
改行を入れたので見やすくなりましたね!
さあ、これを書き込んで今日書いた「行高さを配列を使って変更する」のSubプロシージャ内にカーソルを置いてからキーボードの「F5キー」または「Sub/ユーザフォームの実行」ボタンを1回押して実行してみてください。 ↓
記入間違いがなければ1列目から43列目までの行高さがそれぞれ指定の高さになったはずです。
お疲れさまでした。
次は罫線を引いていきましょう。