WBSなどを作っていると、今日の日付に線を引きたくなると思います。
そして図形の直線で日付に線を引いて、毎度エクセルを開いた日に手で移動させてます。
面倒なので、マクロで自動で線を引くものを作りました。
下記の画像の様に線が引かれるようになります。

銭を引くマクロ
Option Explicit Private Sub Worksheet_Activate() 'エクセルがアクティブになった時 Call Today‗DrawLine End Sub Private Sub Workbook_Open() 'エクセルが開かれた時 Call Today‗DrawLine End Sub Sub Today‗DrawLine() Dim ws As Worksheet Dim range_date As Range Dim cell As Range Dim found‗todayCell As Range Dim lineShape As Shape Dim target_day As Date Dim start‗Cell As Range Dim end‗Cell As Range Set ws = ThisWorkbook.Sheets("シート名") 'シート名を入力 Set range_date = ws.Range("A2:AZ3") '日付が入力されている横長の範囲を指定 Set start‗Cell = ws.Range("A1") '縦線を引く開始セルを指定 Set end‗Cell = ws.Range("A100") '縦線を引く終了セルを指定 target_day = Date ' 今日の日付を取得 Set found‗todayCell = Nothing ' 変数を初期化 '以前の線が残った場合の為に既存線を削除 For Each lineShape In ws.Shapes If InStr(lineShape.Name, "TodayLine_") > 0 Then ' 名前の中に "TodayLine_" が含まれていれば削除 lineShape.Delete End If Next lineShape '指定範囲から今日の日付を探す For Each cell In range_date If IsDate(cell.Value) And Format(cell.Value, "yyyy/mm/dd") = Format(target_day, "yyyy/mm/dd") Then Set found‗todayCell = cell Exit For '見つかったらループを終了 End If Next cell '今日の日付があった(found‗todayCellが初期状態でない)場合、線を描画 If Not found‗todayCell Is Nothing Then With found‗todayCell Dim position As Single Dim startY As Single Dim endY As Single position = .Left + (.Width / 3) ' セルの幅を3で割った値(3分の1)を指定 startY = start‗Cell.Top ' 縦線開始セルの上端 endY = end‗Cell.Top + end‗Cell.Height ' 縦線終了セルの下端 ' 線を描画 (開始のX座標,開始のY座標,終了のX座標,終了のY座標) Set lineShape = ws.Shapes.AddLine(position, startY, position, endY) With lineShape.Line .ForeColor.RGB = RGB(255, 0, 0) ' 赤色 (R,G,B) .Weight = 3 ' 線の太さ .DashStyle = msoLineSolid ' 実線 End With lineShape.Name = "TodayLine_" & Format(target_day, "yyyymmdd") ' 線の名前を識別可能にする End With else MsgBox "今日の日付がありません" & vbCrLf & "マクロを停止するか、日付を追加してください" End If End Sub
スクロール
大体、WBSなどはエクセルの「ウインドウを固定」して使うと思うので、今日の日付ー3日の列へスクロールさせます
Option Explicit Private Sub Worksheet_Activate() 'エクセルがアクティブになった時 Call ScrollColumn End Sub Private Sub Workbook_Open() 'エクセルが開かれた時 Call ScrollColumn End Sub Sub ScrollColumn() Dim ws As Worksheet Dim range_date As Range Dim cell As Range Dim three‗DaysAgo As Date Dim found_dayCell As Range Set ws = ThisWorkbook.Sheets("シート名") 'シート名を入力 Set range_date = ws.Range("A2:AZ3") '日付が入力されている横長の範囲を指定 three‗DaysAgo = DateAdd("d", -3, Date) ' 今日の日付から3日前を取得 ' 指定範囲から3日前の日付を探す For Each cell In range_date If IsDate(cell.Value) And Format(cell.Value, "yyyy/mm/dd") = Format(three‗DaysAgo, "yyyy/mm/dd") Then Set found_dayCell = cell Exit For ' 見つかったらループを終了 End If Next cell ' 今日が見つかったら。その列にスクロール If Not found_dayCell Is Nothing Then Application.GoTo ws.Cells(1, found_dayCell.Column), True ' Trueで選択セルを画面の左上に移動させます End If End Sub
コメント