VBAことはじめ

Date型

バイトへの置き土産のついでにVBAを触ってみる.指定した月の日付を出して土日だけ灰色にする. Date型は結局値をどう保持してるのか謎だけど下みたいな無理やりな入れ方でも通る. 起動時に実行させるにはプロージャ名をSub workbook_open()とする.他にもいろいろ指定できるらしい(VBA基本(そのブックを開いた時に自動実行)).ブックへの指定となるため標準モジュールではなくThisWorkboookに記述しないといけないそうでちょっとハマった.

year,monthとかを変数宣言するとYear()とかMonth()とかが使えなくてそわそわする.配列も関数も引数の指定の仕方が同じなのがよくない.

Sub workbook_open()
    Set ws1 = Sheets("Sheet1")
    ws1.Range(Cells(1, 1), Cells(31, 4)).ClearContents
    ws1.Range(Cells(1, 1), Cells(31, 4)).Interior.ColorIndex = xlNone
    
    Dim ym As String
    ym = InputBox("2018/2の形で入力してください", "月の確認", "")
    Dim buff As Variant
    buff = Split(ym, "/")
    If UBound(buff) <> 1 Then
        MsgBox "入力が不正です"
        Exit Sub
    End If
    
    Dim y, m As Integer
    y = Int(buff(0))
    m = Int(buff(1))
    
    Dim ymd As Date
    ymd = DateAdd("d", 25, DateAdd("m", -1, ym + "/1"))
    
    Dim i As Integer
    For i = 1 To 31
        ws1.Cells(i, 1).Value = year(ymd)
        ws1.Cells(i, 2).Value = month(ymd)
        ws1.Cells(i, 3).Value = day(ymd)
        ws1.Cells(i, 4).Value = WeekdayName(Weekday(ymd), True)
        
        If Weekday(ymd) = 1 Or Weekday(ymd) = 7 Then
            ws1.Cells(i, 4).Interior.ColorIndex = 15
        End If
        
        ymd = DateAdd("d", 1, ymd)
        If day(ymd) >= 26 And month(ymd) = m Then
            Exit Sub
        End If
    Next
    
End Sub

出力.どうしても灰色にしたいらしい.

f:id:alphajinsei:20180101022954p:plain