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
出力.どうしても灰色にしたいらしい.