ExcelVBA 応用編 プロシージャの部品化 |
「ExcelVBA入門」を応用したサンプルプロシージャです。
このサンプルプロシージャは、私の環境で作成したものです。このままコードをコピーしても実行できない場合もあります。
そのようなときには、自分の環境に合わせて作成しなおしてください。
★サブルーチンを使って表を作成する
今回のテーマはプロシージャの部品化です。
ある程度の大きさのプロシージャを作る場合、処理の内容ごとに小さなプロシージャを作り、そのプロシージャを組み合わせて使うことができます。
セル範囲を引数として、親プロシージャからサブルーチンのプロシージャを呼び出しています。
このプロシージャを使ったサンプルブックはDLページにあります(Sample_4.EXE)
Sub スケジュール表()
'サブルーチンへ引数を渡して、表を作成する
s_月見出し Range("B2:E2")
s_行見出し Range("B3:B33")
s_週見出し Range("d3:d33")
s_日にち書式 Range("c3:c33")
s_内容書式 Range("E3:E33")
End Sub
Sub s_月見出し(myRng As Range)
'年月を表示するためのレイアウト
With myRng '受け取った引数(セル)を対象とする
.Merge '1つのセルに結合する
.Font.Size = 14 '文字のサイズ
.Font.ColorIndex = 2 '文字色(白)
.Interior.ColorIndex = 10 'セルの塗りつぶし
.VerticalAlignment = xlCenter '文字の縦位置を中央に揃える
.HorizontalAlignment = xlLeft '文字の横位置左に揃える
End With
s_外罫線を引く myRng
End Sub
Sub s_行見出し(myRng As Range)
'年月を表示するためのレイアウト
With myRng '受け取った引数(セル)を対象とする
.Merge '1つのセルに結合する
.Interior.ColorIndex = 10 'セルの塗りつぶし
.ColumnWidth = 5 '列幅
End With
s_外罫線を引く myRng
End Sub
Sub s_週見出し(myRng As Range)
'週の見出しを表示するためのレイアウト
With myRng
.HorizontalAlignment = xlCenter '文字の横位置を中央に揃える
.VerticalAlignment = xlCenter '文字の縦位置を中央に揃える
.Interior.ColorIndex = 19 'セルの塗りつぶし
.ColumnWidth = 6 'セルの幅
End With
s_外罫線を引く myRng
s_中罫線を引く myRng
End Sub
Sub s_日にち書式(myRng As Range)
'日付が入る部分のレイアウト
With myRng
.Font.Size = 14
.Interior.ColorIndex = 19 'セルの塗りつぶし
.HorizontalAlignment = xlCenter '文字の横位置
.VerticalAlignment = xlCenter '文字の縦位置
.ColumnWidth = 6 'セルの幅
.RowHeight = 15 '行の高さ
End With
s_外罫線を引く myRng
s_中罫線を引く myRng
End Sub
Sub s_内容書式(myRng As Range)
'スケジュールが入る部分のレイアウト
With myRng
.Font.Size = 12
.HorizontalAlignment = xlLeft '文字の横位置左に揃える
.VerticalAlignment = xlCenter '文字の縦位置中央に揃える
.ColumnWidth = 60 'セルの幅
End With
s_外罫線を引く myRng
s_中罫線を引く myRng
End Sub
Sub s_外罫線を引く(myRng As Range)
With myRng
With .Borders(xlEdgeLeft) '外枠の左側
.LineStyle = xlContinuous '罫線の線種=連続線
.Weight = xlMedium '罫線の太さ=中太
End With
With .Borders(xlEdgeTop) '外枠の上端
.LineStyle = xlContinuous
.Weight = xlMedium
End With
With .Borders(xlEdgeBottom) '外枠の下端
.LineStyle = xlContinuous
.Weight = xlMedium
End With
With .Borders(xlEdgeRight) '外枠の右側
.LineStyle = xlContinuous
.Weight = xlMedium
End With
End With
End Sub
Sub s_中罫線を引く(myRng As Range)
'この myRng は親プロシージャから受け取った引数です。
'Withステートメントで対象範囲を指定しています。
With myRng
'セルに罫線を引くには Bordersプロパティを使います。
'xlInsideHorizontalプロパティはセル範囲内側の平行線です。
'.LineStyle は線の種類でここでは連続線を指定しています
'.Weight は線の太さでここでは細い線を指定しています
With .Borders(xlInsideHorizontal)
.LineStyle = xlCountinuous
.Weight = xlThin
End With
End With
End Sub