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