| 
    
     |  | ▼クマ さん: Sheet1の表の部分は数式だけで出来ると思います。
 Sheet2の1行目が1/1として、
 
 Sub Macro1()
 With Worksheets("Sheet1")
 .Range("B2").Formula = "=TODAY()"
 .Range("B3").Resize(30).Formula = "=B2+1"
 .Range("C2").Resize(31, 9).Formula = "=IF(OFFSET(Sheet2!C$1,DATEDIF(""1/1"",$B2,""D""),0)="""","""",""●"")"
 End With
 End Sub
 
 を実行すると、Sheet1に数式が入力されます。
 実行した後はもうこのマクロは不要ですので削除してかまいません。
 (念のために、マクロ実行前にブックを保存してください。)
 
 Sheet1のB列最上部(B2)が今日の日付になり、B列に今日を基点として31日分の
 日付が表示されます。C列以降にはB列の日付を基にSheet2のC1からOFFSETした
 位置の値を参照する式が入力されます。そのため、Sheet1は必ず1行目の1/1から
 抜けが無い状態に存在しなければいけません。(2/18なら49行目)
 
 B2の =TODAY() のところを適当な日付に変えてみてください。
 C列以降が自動で参照範囲(表示結果)が変わると思います。
 
 =TODAY() により勝手にブックを開いた日に日付が変わるので、
 Workbook_Openイベントのコードは不要になります。
 
 |  |