VBAで~ 第4回 続き カレンダー作成

第4回(4月21日)の復習 続き

第4回(4月21日)の復習をしていて、
前回 書いた、VBAで~ 第4回 SheetDetect という関数を作って、
練習4、練習5、練習6までを実行してみました。

実行すると、
選択したシートに、データが存在する可能性があります。
データを完全に削除するには、[削除]をクリックしてください。
というダイアログボックスが表示されます。

 

[削除]をクリックすると、
また同じダイアログボックスが出てきて、
ということを12回繰り返されました。

 

確認ダイアログボックスを出さない設定

このダイアログボックスを出さない命令
  Application.DisplayAlerts = False
を、For ループの前に入れます。

 

確認ダイアログボックスを出す設定

出さない設定にしっぱなしだと、不都合がが出てくる場合もあるので、
ダイアログボックスを出す設定
  Application.DisplayAlerts = True
を、For ループのあとに、入れておきます。

 

F5 キーで動作確認すると、一瞬で実行されるので、
何が起こっているかわかりません。
こういう時は、F8 キーを押していくと、
プロシージャの1行ずつを実行していくので、
何が起こっているか、わかっていいです。

 

西暦○○○○年2月は、29日、28日?

変数のところに、Dim year を追加します。
Sub sample()
  Dim i
  Dim j
  Dim saishuubi
  Dim year

2月の設定のところに、IF 構文を使って、
  Case 2
  If (year Mod 400 = 0) Or _
    (year Mod 4 = 0) And _
    (year Mod 100 <> 0) Then
      saishuubi = 29
  Else
      saishuubi = 28
  End If
を追加します。

Or _
And _ のところは、見やすくするために、
or を打ち込んで、スペース _ エンターキーで改行
And のところも、スペース _ エンターキーで改行させています。
改行しないと、
If (year Mod 400 = 0) Or (year Mod 4 = 0) And (year Mod 100 <> 0) Then 
と、1行がながくなるだけですが。
この辺は、好みの問題という気もします。

 

カレンダーを作成したい年

さいごに、元のSheet1の、セルB2 に、
カレンダーを作成したい年を入力します。
B2 セルに、2019、C2 セルに、年 
とか書いておきます。

 

プロシージャの方で、
セルB2 を指定する(数値を受けとる)設定を追加します。
Sub sample()
  Dim i
  Dim j
  Dim saishuubi
  Dim year
  year = Cells(2, 2).Value

全体のプロシージャは、

 

Sub sample()
  Dim i
  Dim j
  Dim saishuubi
  Dim year
  year = Cells(2, 2).Value
  Application.DisplayAlerts = False
  For i = 1 To 12
  If SheetDetect(Str(i) & “月”) Then
    Worksheets(Str(i) & “月”).Delete
  End If
    Worksheets.Add after:=Sheets(i)
    Columns(“B:AF”).ColumnWidth = 3
    ActiveSheet.Name = Str(i) & “月”
    Select Case i
      Case 1, 3, 5, 7, 8, 10, 12
        saishuubi = 31
      Case 4, 6, 9, 11
        saishuubi = 30
    Case 2
      If (year Mod 400 = 0) Or _
        (year Mod 4 = 0) And _
        (year Mod 100 <> 0) Then
        saishuubi = 29
      Else
        saishuubi = 28
      End If
  End Select

  For j = 1 To saishuubi
    Cells(27, j + 1) = j
  Next
Next
Application.DisplayAlerts = True
End Sub

Function SheetDetect(SName As String) As Boolean
  Dim sht As Worksheet
  For Each sht In ThisWorkbook.Worksheets
    If sht.Name = SName Then
      SheetDetect = True
      Exit Function
    End If
  Next
End Function

 

マクロのボタン追加

元のsheet1 をアクティブにして、
開発 > 挿入 で、ボタンを選択します。

 

ボタンをクリックすると、この画面になります。
sample を選択。

 

この画面が出てくるので、
ボタン1 のところに、


カレンダー作成と入れておきます。

 

カレンダー作成 ボタンを押すと、こんな感じで、
カレンダー作成の途中までが、完成します。

ここまで、出来上がれば、もう一息という感じ。

 

 

サイトマップ