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

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

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

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


Sub 縦サンプル標準()
Dim dtm基準日 As Date
Dim str基点セル As String
Dim i As Integer
Dim strADDR 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月目の暦作成後に[基点セル]の位置が[2列の結合セル]になる為、
' 2ヶ月目以降の[Offset計算]が1列分ズレてしまう。
' これを避ける為、結合セルにならない位置を基点セルとして定義し直す。
  str基点セル = ActiveSheet.Range(str基点セル).Offset(0, 2).Address(False, False)
  For i = 1 To 12
    strADDR = ActiveSheet.Range(str基点セル) _
                .Offset(0, 4 * (i - 1) - 2).Address(FalseFalse)
    Call kt暦作成(1, 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月目の暦作成後に[基点セル]の位置が[2列の結合セル]になる為、
' 2ヶ月目以降の[Offset計算]が1列分ズレてしまう。
' これを避ける為、結合セルにならない位置を基点セルとして定義し直す。
  str基点セル = ActiveSheet.Range(str基点セル).Offset(0, 2).Address(False, False)
  For i = 1 To 12
    With ActiveSheet
      strADDR = .Range(str基点セル) _
                  .Offset(0, 5 * (i - 1) - 2).Address(FalseFalse)
      strADDR2 = .Range(strADDR).Offset(0, 3).Address(False, False)
      Set rng追加枠 = .Range(.Range(strADDR2).Offset(1, 0), _
                          .Range(strADDR2).Offset(31, 0))

    End With

    Call kt暦作成(1, dtm基準日, kt_土日祝, ActiveSheet, strADDR)
' 『追加した枠内の書式設定』
    With rng追加枠
      .Columns(1).ColumnWidth = 5
      .Font.Name = "MS P明朝"
      .Font.Size = 11
      With .Borders
        .Item(xlEdgeTop).LineStyle = xlDouble
        .Item(xlEdgeBottom).LineStyle = xlDouble
        .Item(xlEdgeRight).LineStyle = xlDouble
        .Item(xlEdgeLeft).LineStyle = xlNone    ' 一旦2重線を削除
        .Item(xlEdgeLeft).LineStyle = xlContinuous
        .Item(xlInsideHorizontal).LineStyle = xlContinuous
      End With
      For j = 1 To 31
        With .Cells(j, 1)
          .Interior.Color = .Offset(0, -1).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月目の暦作成後に[基点セル]の位置が[2列の結合セル]になる為、
' 2ヶ月目以降の[Offset計算]が1列分ズレてしまう。
' これを避ける為、結合セルにならない位置を基点セルとして定義し直す。
  str基点セル = ActiveSheet.Range(str基点セル).Offset(0, 2).Address(False, False)
  For i = 1 To 12
    With ActiveSheet
      strADDR = .Range(str基点セル) _
                  .Offset(0, 6 * (i - 1) - 2).Address(FalseFalse)
      strADDR2 = .Range(strADDR).Offset(0, 3).Address(False, False)
      Set rng追加枠 = .Range(.Range(strADDR2).Offset(1, 0), _
                          .Range(strADDR2).Offset(31, 1))

    End With

    Call kt暦作成(1, dtm基準日, kt_土日祝, ActiveSheet, strADDR)
' 『追加した枠内の書式設定』
    With rng追加枠
      .Columns(1).ColumnWidth = 5
      .Columns(2).ColumnWidth = 8
      .Font.Name = "MS P明朝"
      .Font.Size = 11
      With .Borders
        .Item(xlEdgeTop).LineStyle = xlDouble
        .Item(xlEdgeBottom).LineStyle = xlDouble
        .Item(xlEdgeRight).LineStyle = xlDouble
        .Item(xlEdgeLeft).LineStyle = xlNone  ' 一旦2重線を削除
        .Item(xlEdgeLeft).LineStyle = xlContinuous
        .Item(xlInsideHorizontal).LineStyle = xlContinuous
        .Item(xlInsideVertical).LineStyle = xlContinuous
      End With
      For j = 1 To 31
        With .Cells(j, 1)
          .Interior.Color = .Offset(0, -1).Interior.Color  ' 休日表示のコピー
          .Offset(0, 1).Interior.Color = .Offset(0, -1).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.