0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【EXCEL】カレンダーづくり(Write Only Code)

Last updated at Posted at 2024-07-17

やること

 EXCELでカレンダーを作り、そのファイルをマスターにして使いまわしている。
 今回、その作成手順をVBAで「マクロの記録」の如く残してみる。

事前確認:Qiitaでの記事

 ここで、以下の検索をしたところ、13件ヒットした。(2024/07/14時点)
「title:EXCEL,カレンダー」の検索結果 - Qiita

 以下、3つにまとめる。

EXCELの関数など、シート上で作成

【Excel】Excel でカレンダーを作ってみる #Mac - Qiita
投稿日 2018年05月24日

Excelでカレンダーを作る機会があったので,使いそうな機能をまとまてみる.

Excelでカレンダー作り ##excel関数 - Qiita
投稿日 2021年12月11日

Excel関数でカレンダーを作ったときのメモ。

Excelで〇日を含む週からスタートするカレンダーを作る #Excel関数 - Qiita
最終更新日 2023年11月09日 投稿日 2023年11月09日

「うちの会社、15日締だから16日の週から始まるカレンダーをExcelで作りたいんだけど」と言われて作ったので備忘録として残して共有します。

Excelに自動更新される祝日カレンダーを追加する(営業日計算用) #PowerQuery - Qiita
投稿日 2023年12月17日

Excelでカレンダーを作ってみる #VBA - Qiita
最終更新日 2018年05月30日 投稿日 2018年05月30日

【Excel】Excel でカレンダーを作ってみるを見たからではないのですが、
実は、カレンダーに年月指定で、出荷状況を表示する機能を作っていました。

Excel VBA 奮闘記 カレンダー(Write Only Code) #VBA - Qiita
投稿日 2014年07月12日

ほとんど書捨て(Write Only)に近いけれどカレンダーらしきものを書いた。

カレンダーフォーム

Excel カレンダーフォーム 奮闘記 #VBA - Qiita
最終更新日 2020年06月01日 投稿日 2020年06月01日

Excelの日付入力をカレンダーフォームの日付クリックで入力したい。
昔(調べてみると2007までは、標準であったようです。)は出来ていたようなのですが、
最近は出来なくなったようで、excel calendar form とかで検索するとヒントやダウンロードできるものが
たくさん見つかりました。

その他

神Excelの神カレンダー(?)から日付を導く #PowerBI - Qiita
投稿日 2020年05月17日

Excelの入力規則でつくる食卓カレンダー #Excel - Qiita
最終更新日 2018年12月10日 投稿日 2018年12月10日

Power Automate: カレンダーのように列名が変化するExcelテーブルからの取得 #JSON - Qiita
最終更新日 2022年02月19日 投稿日 2021年09月01日

Excel上のカレンダーをGoogleカレンダーで共有する #CSV - Qiita
最終更新日 2019年09月12日 投稿日 2019年09月12日

自作カレンダーにGoogleカレンダーのデータを一瞬で反映させる方法 (Googleカレンダー→GAS→スプレッドシート→EXCEL) #Excel - Qiita
最終更新日 2019年12月12日 投稿日 2019年12月03日

Rを使ってExcelシートの年間予定表をGoogleカレンダーに登録する #CSV - Qiita
最終更新日 2021年12月30日 投稿日 2021年12月21日

今回のメモ

  Excel VBA 奮闘記 カレンダー(Write Only Code) #VBA - Qiitaを試す際、以下の修正。

'    Set tmp = Worksheets(Me.name).Range("A1")
    Set tmp = Worksheets("Sheet1").Range("A1") ' シート名を指定

また、最後に以下を記載し実施。

Sub a()
 Call main
End Sub

Excelに自動更新される祝日カレンダーを追加する(営業日計算用) #PowerQuery - Qiitaで紹介されているものをシート「祝日」として利用。

該当ファイル

カレンダー.bas

Attribute VB_Name = "カレンダー"
Option Explicit
Sub main()
    '-----祝日シート追加-----
    ' 内閣府の祝日データを「holiday_j」と定義し、シートの最後に移動
    Dim wb As Workbook                  ' VBAを起動したワークブック用
    Set wb = ActiveWorkbook             ' wb.Name = Book1(初期起動時)
    Dim ws As Worksheet                 ' VBAを起動したワークシート用
    Set ws = ActiveSheet                ' ws.Name = Sheet1(初期起動時)
    Dim URL_data As String              ' 祝日データのURL用
     URL_data = "https://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv"
    ' 昭和30年(1955年)から令和7年(2025年)国民の祝日(csv形式:20KB) (2024/07/14時点)
    ' 国民の祝日について - 内閣府 https://www8.cao.go.jp/chosei/shukujitsu/gaiyou.html
    Workbooks.Open URL_data             ' 祝日データをEXCELで開く
    Rows("1:1").Delete Shift:=xlUp      ' テキスト削除
    Columns("A:A").NumberFormatLocal = "[$-x-sysdate]dddd, mmmm dd, yyyy"
    ActiveWorkbook.Names.Add Name:="holiday_j", RefersTo:="=syukujitsu!$A:$A"
    Sheets("syukujitsu").Move After:=wb.Worksheets(wb.Worksheets.Count)
    ActiveSheet.Name = "祝日"           ' シート名を変更
    wb.Activate                         ' Moveのため新規時には不要
    ws.Activate                         ' 最初のシートを表示
    '-----1か月カレンダー-----
    '3行目に年、月を入力:シート名をタイトルにした日曜始まりのカレンダー
    ws.Name = "壱ヶ月カレンダー"
    'セル全体の設定
    Cells.Select
        Call セル設定(11.89, 96#, 255, 255, 255)
        Call 文字設定_POP(11, "黒", "中央")
    '各行の設定
    ' タイトル
    Rows("1:1").Select
        Call セル設定(11.89, 30#, 255, 255, 255)
    Range("A1:G1").Select
        Call 文字設定_POP(22, "黒", "中")
        Cells(1, 1) = "=RIGHT(@CELL(""filename"",A1),LEN(@CELL(""filename"",A1))-FIND(""]"",@CELL(""filename"",A1)))"
    ' 空行
    Rows("2:2").Select
        Call セル設定(11.89, 13.2, 255, 255, 255)
    ' 年月入力
    Rows("3:3").Select
        Call セル設定(11.89, 21#, 255, 255, 255)
    Range("B3").Select
        Call セル設定(11.89, 21#, 255, 255, 204)
        Call 文字設定_POP(18, "黒", "右")
'2024.10.27 年を固定値から作成日に修正
'        ActiveCell.FormulaR1C1 = "2024"
        ActiveCell.FormulaR1C1 = Format(Date, "yyyy")
'2024.10.27 年を固定値から作成日に修正
    Range("C3").Select
        Call 文字設定_POP(18, "黒", "左")
        ActiveCell.FormulaR1C1 = "年"
    Range("D3").Select
        Call セル設定(11.89, 21#, 255, 255, 204)
        Call 文字設定_POP(18, "黒", "右")
'2024.10.27 年を固定値から作成日に修正
'        ActiveCell.FormulaR1C1 = "7"
        ActiveCell.FormulaR1C1 = Format(Date, "mm")
'2024.10.27 年を固定値から作成日に修正
    Range("E3").Select
        Call 文字設定_POP(18, "黒", "左")
        ActiveCell.FormulaR1C1 = "月"
    Range("G3").Select
        Call 文字設定_POP(18, "白", "左")
        ActiveCell.FormulaR1C1 = "=DATE(RC[-5],RC[-3],1)"
    ' 空行
    Rows("4:4").Select
        Call セル設定(11.89, 13.2, 255, 255, 255)
    ' 曜日
    Rows("5:5").Select
        Call セル設定(11.89, 22.2, 255, 255, 255)
    Range("A5").Select
        Call 文字設定_POP(18, "赤", "中央")
        ActiveCell.FormulaR1C1 = "日"
    Range("B5").Select
        Call 文字設定_POP(18, "黒", "中央")
        ActiveCell.FormulaR1C1 = "月"
    Range("C5").Select
        Call 文字設定_POP(18, "黒", "中央")
        ActiveCell.FormulaR1C1 = "火"
    Range("D5").Select
        Call 文字設定_POP(18, "黒", "中央")
        ActiveCell.FormulaR1C1 = "水"
    Range("E5").Select
        Call 文字設定_POP(18, "黒", "中央")
        ActiveCell.FormulaR1C1 = "木"
    Range("F5").Select
        Call 文字設定_POP(18, "黒", "中央")
        ActiveCell.FormulaR1C1 = "金"
    Range("G5").Select
        Call 文字設定_POP(18, "青", "中央")
        ActiveCell.FormulaR1C1 = "土"
    ' 日付欄
    Dim i As Byte
    Dim j As Byte
    For i = 6 To 11                     ' 6行目から11行目
        If i = 6 Then                   ' セルA6のみ例外処理
            Application.ReferenceStyle = xlR1C1
            Cells(6, 1).NumberFormatLocal = "d"
            Cells(6, 1) = "=R[-3]C[6]-WEEKDAY(R[-3]C[6])+1"
            Application.ReferenceStyle = xlA1
        Else
            Application.ReferenceStyle = xlR1C1
            Cells(i, 1).NumberFormatLocal = "d"
            Cells(i, 1) = "=R[-1]C[6]+1"
            Application.ReferenceStyle = xlA1
        End If
        For j = 2 To 7                  ' B列からG列まで
            Application.ReferenceStyle = xlR1C1
            Cells(i, j).NumberFormatLocal = "d"
            Cells(i, j) = "=RC[-1]+1"   ' 左の列+1
            Application.ReferenceStyle = xlA1
        Next j
    Next i
    '-----条件付き書式設定 の ルール設定-----
    Cells.FormatConditions.Delete
    Range("A6:G11").Select
    ' 条件設定① 今月以外を「白」
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=MONTH(A6)<>$D$3"
    Selection.FormatConditions(1).Font.Color = RGB(255, 255, 255)
    ' 条件設定② 祝日を「赤」
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=COUNTIF(holiday_j,A6)>0"
    Selection.FormatConditions(2).Font.Color = RGB(255, 0, 0)
    ' 条件設定③ 日曜日を「赤」
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=WEEKDAY(A6)=1"
    Selection.FormatConditions(3).Font.Color = RGB(255, 0, 0)
    Selection.FormatConditions(3).StopIfTrue = False
    ' 条件設定④ 土曜日を「青」
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=WEEKDAY(A6)=7"
    Selection.FormatConditions(4).Font.Color = RGB(0, 0, 255)
    Selection.FormatConditions(4).StopIfTrue = False
    '-----罫線設定-----
    Range("A6:G11").Borders.LineStyle = xlContinuous
End Sub


Function セル設定(幅 As Single,  As Single, 背景R As Byte, 背景G As Byte, 背景B As Byte)
    With Selection
        .ColumnWidth = 
        .RowHeight = 
        .Interior.Color = RGB(背景R, 背景G, 背景B)
    End With
End Function

Function 文字設定_POP(サイズ As Single, 文字色 As String, 横位置 As String)
    Dim 文字色R As Byte
    Dim 文字色G As Byte
    Dim 文字色B As Byte
    Select Case 文字色
        Case "黒"
               文字色R = 0
               文字色G = 0
               文字色B = 0
        Case "白"
               文字色R = 255
               文字色G = 255
               文字色B = 255
        Case "赤"
               文字色R = 255
               文字色G = 0
               文字色B = 0
        Case "緑"
               文字色R = 0
               文字色G = 255
               文字色B = 0
        Case "青"
               文字色R = 0
               文字色G = 0
               文字色B = 255
        Case "水"
               文字色R = 0
               文字色G = 255
               文字色B = 255
        Case "紫"
               文字色R = 255
               文字色G = 0
               文字色B = 255
        Case "黄"
               文字色R = 255
               文字色G = 255
               文字色B = 0
        Case Else
               文字色R = 16
               文字色G = 16
               文字色B = 16
    End Select
    Dim 位置 As Integer
    Select Case 横位置
        Case "左"                       ' 左詰め(インデント)
            位置 = xlLeft
        Case "中央"                     ' 中央揃え
            位置 = xlCenter
        Case "中"                       ' 選択範囲内で中央
            位置 = xlCenterAcrossSelection
        Case "右"                       ' 右詰め(インデント)
            位置 = xlRight
        Case Else                       ' xlFill : 繰り返し xlJustify : 両端揃え xlDistributed : 均等割り付け は
            位置 = xlGeneral            ' 標準
    End Select
    With Selection
        .Font.Name = "HGP創英角ポップ体"
        .Font.FontStyle = "標準"
        .Font.Size = サイズ
        .Font.Color = RGB(文字色R, 文字色G, 文字色B)
        .VerticalAlignment = xlGeneral
        .HorizontalAlignment = 位置
    End With
End Function
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?