kt暦作成 : 横型暦のサンプルコード

サンプルのように、ユーザー側での追加加工を考慮して、『kt暦作成』内では、
【ScreenUpdating = False/True 】を行なっていません。ユーザー側で必ず行って下さい。

また、『kt暦作成』 内では シート の プロテクトチェック を行ない、プロテクト時には作成
しないようになっていますが、ユーザーサイド でも事前に チェック する事をお薦めします。

下記のサンプルコードでは、出力先シートのクリア[ Cells.Clear ]を行なっています。
休日表示に『休日マップ』を使用する場合で、その『休日マップ』が出力先シート上に
用意されていると、シートクリアによって消えてしまいます。クリア前に文字列変数に
保存して「kt暦作成」にはその文字列変数を渡すようにして下さい。


Sub 横サンプル標準()
Dim i As Integer
Dim strADDR As String
Dim dtm基準日 As Date
Dim str基点セル As String
  dtm基準日 = DateValue("2001/1/1")
  str基点セル = "B2"

  If (ActiveSheet.ProtectContents = True) Then
    MsgBox "出力先シートがプロテクトされています"
    Exit Sub
  End If

  Application.ScreenUpdating = False
  ActiveSheet.Cells.Clear

' 1月目の暦作成後に[基点セル]の位置が[3列の結合セル]になる為、
' 2ヶ月目以降の[Offset計算]が2列分ズレてしまう。
' これを避ける為、結合セルにならない位置を基点セルとして定義し直す。
  str基点セル = ActiveSheet.Range(str基点セル).Offset(0, 3).Address(False, False)

  For i = 1 To 12
    strADDR = ActiveSheet.Range(str基点セル) _
                .Offset(5 * (i - 1), -3).Address(FalseFalse)
    Call kt暦作成(2, dtm基準日, kt_土日祝, ActiveSheet, strADDR)
    dtm基準日 = DateAdd("m", 1, dtm基準日)
  Next i
  Application.ScreenUpdating = True
End Sub

'-------------------------------『1枠追加』-----------------------------
Sub 横サンプル1枠追加()
Dim dtm基準日 As Date
Dim str基点セル As String
Dim i As Integer
Dim j As Integer
Dim strADDR As String
Dim strADDR2 As String
Dim rng追加枠 As Range
  dtm基準日 = DateValue("2001/1/1")
  str基点セル = "B2"

  If (ActiveSheet.ProtectContents = True) Then
    MsgBox "出力先シートがプロテクトされています"
    Exit Sub
  End If

  Application.ScreenUpdating = False
  ActiveSheet.Cells.Clear

' 1月目の暦作成後に[基点セル]の位置が[3列の結合セル]になる為、
' 2ヶ月目以降の[Offset計算]が2列分ズレてしまう。
' これを避ける為、結合セルにならない位置を基点セルとして定義し直す。
  str基点セル = ActiveSheet.Range(str基点セル).Offset(0, 3).Address(False, False)

  For i = 1 To 12
    With ActiveSheet
      strADDR = .Range(str基点セル) _
                  .Offset(6 * (i - 1), -3).Address(FalseFalse)
      strADDR2 = .Range(strADDR).Offset(4, 0).Address(False, False)
      Set rng追加枠 = .Range(.Range(strADDR2), _
                        .Range(strADDR2).Offset(0, 30))

    End With

    Call kt暦作成(2, dtm基準日, kt_土日祝, ActiveSheet, strADDR)
' 『追加した枠内の書式設定』
    With rng追加枠
      .Rows(1).RowHeight = 21
      .Font.Name = "MS P明朝"
      .Font.Size = 11
      With .Borders
        .Item(xlEdgeTop).LineStyle = xlNone    ' 一旦2重線を削除
        .Item(xlEdgeTop).LineStyle = xlContinuous
        .Item(xlEdgeBottom).LineStyle = xlDouble
        .Item(xlEdgeRight).LineStyle = xlDouble
        .Item(xlEdgeLeft).LineStyle = xlDouble
        .Item(xlInsideVertical).LineStyle = xlContinuous
      End With
      For j = 1 To 31
        With .Cells(1, j)
          .Interior.Color = .Offset(-1, 0).Interior.Color  ' 休日表示のコピー
        End With
      Next j
    End With
    dtm基準日 = DateAdd("m", 1, dtm基準日)
  Next i
  Set rng追加枠 = Nothing
  Application.ScreenUpdating = True
End Sub

'-------------------------------『2枠追加』-----------------------------
Sub 横サンプル2枠追加()
Dim dtm基準日 As Date
Dim str基点セル As String
Dim i As Integer
Dim j As Integer
Dim strADDR As String
Dim strADDR2 As String
Dim rng追加枠 As Range
  dtm基準日 = DateValue("2001/1/1")
  str基点セル = "B2"

  If (ActiveSheet.ProtectContents = True) Then
    MsgBox "出力先シートがプロテクトされています"
    Exit Sub
  End If

  Application.ScreenUpdating = False
  ActiveSheet.Cells.Clear

' 1月目の暦作成後に[基点セル]の位置が[3列の結合セル]になる為、
' 2ヶ月目以降の[Offset計算]が2列分ズレてしまう。
' これを避ける為、結合セルにならない位置を基点セルとして定義し直す。
  str基点セル = ActiveSheet.Range(str基点セル).Offset(0, 3).Address(False, False)

  For i = 1 To 12
    With ActiveSheet
      strADDR = .Range(str基点セル) _
                  .Offset(7 * (i - 1), -3).Address(FalseFalse)
      strADDR2 = .Range(strADDR).Offset(4, 0).Address(False, False)
      Set rng追加枠 = .Range(.Range(strADDR2), _
                        .Range(strADDR2).Offset(1, 30))

    End With

    Call kt暦作成(2, dtm基準日, kt_土日祝, ActiveSheet, strADDR)
' 『追加した枠内の書式設定』
    With rng追加枠
      .Rows(1).RowHeight = 21
      .Rows(2).RowHeight = 21
      .Font.Name = "MS P明朝"
      .Font.Size = 11
      With .Borders
        .Item(xlEdgeTop).LineStyle = xlNone    ' 一旦2重線を削除
        .Item(xlEdgeTop).LineStyle = xlContinuous
        .Item(xlEdgeBottom).LineStyle = xlDouble
        .Item(xlEdgeRight).LineStyle = xlDouble
        .Item(xlEdgeLeft).LineStyle = xlDouble
        .Item(xlInsideHorizontal).LineStyle = xlContinuous
        .Item(xlInsideVertical).LineStyle = xlContinuous
      End With
      For j = 1 To 31
        With .Cells(1, j)
          .Interior.Color = .Offset(-1, 0).Interior.Color  ' 休日表示のコピー
          .Offset(1, 0).Interior.Color = .Offset(-1, 0).Interior.Color
        End With
      Next j
    End With
    dtm基準日 = DateAdd("m", 1, dtm基準日)
  Next i
  Set rng追加枠 = Nothing
  Application.ScreenUpdating = True
End Sub




角田 桂一 Mail:addinbox@h4.dion.ne.jp CopyRight(C) 2001 Allrights Reserved.