お世話になります
エクセルで、現在時刻のコマンドボタンをクリックすると
現在時刻の時間線に見立てたシェイプの縦棒を
セルの時間目盛に合わせて、表示させたいです
AM5:30からPM7:30までなら、添付codeでうまく表示されるのですが
24時間を超えて、26時間あると、セルの時間目盛がズレてしまいます
(例:現在時刻11:30AMなのに、セル目盛10:00AMの位置にシェイプの縦棒がきてしまう)
どなたか、26時間で目盛セルの正しい位置に来るよう、お力をお貸しください
従来あったコードのどこか修正すれば使えそうなのですが
修正ポイントは以下のようになっています
★時間フィールド RANGE(U16:DU72)
開始時刻 5:00AM RANGE("U16")
深夜零時 0:00AM RANGE("CS16")
終了時刻 翌7:00AM RANGE("DU16")
★1つのセル 15分間隔(4つのセルで60分間隔)
★現在時刻はRANGE("T6")に表示
Public Sub 時間線() Dim 時間 As Date Dim 位置, 時間差 As Variant Dim 時刻, 現シート As String Dim スタートセル, ゴールセル As Range Dim BX, EX, BY, EY, CX, CY As Single Dim 図形 As Shape Dim 判定 As Boolean On Error GoTo エラーメッセージ Application.ScreenUpdating = False 現シート = ActiveSheet.Name Sheets(1).Activate 時刻 = Time 時間 = TimeValue(時刻) 'Range("T6") = Format(Now, "yyyy/mm/dd hh:nn:ss") 時間差 = DateDiff("n", "00:00", 時間) If 時間差 > 540 Then ' 9:00 ~ 24:00 Set スタートセル = Range("U16") '基準の定義 Set ゴールセル = Range("DU72") BX = スタートセル.Left BY = スタートセル.Top EX = ゴールセル.Left EY = ゴールセル.Top 位置 = DateDiff("n", "19:30", 時間) / 270 * (EX - BX) If 位置 < 0 Then 位置 = 0 'ElseIf BX + 位置 > EX Then ' 位置 = EX - BX End If Else Set スタートセル = Range("CS16") '基準の定義 Set ゴールセル = Range("DU72") BX = スタートセル.Left BY = スタートセル.Top EX = ゴールセル.Left EY = ゴールセル.Top 位置 = DateDiff("n", "00:00", 時間) / 240 * (EX - BX) If BX + 位置 > EX Then 位置 = EX - BX End If End If 判定 = False For Each 図形 In ActiveSheet.Shapes If 図形.Name = "時間線" Then 図形.Select 判定 = True Exit For End If Next If 判定 = False Then ActiveSheet.Shapes.AddLine(BX, BY, BX, EY).Select With Selection.ShapeRange.Line .Weight = 4.5 .DashStyle = msoLineSquareDot .Style = msoLineSingle .ForeColor.SchemeColor = 10 End With Selection.PrintObject = False Selection.Name = "時間線" End If Selection.ShapeRange.ZOrder msoBringToFront Selection.Left = BX + 位置 Selection.Top = BY Sheets(現シート).Activate Application.ScreenUpdating = True Exit Sub エラーメッセージ: MsgBox Err.Description & " Err.No " & Err.Number & vbCrLf & vbCrLf & "時間線移動は失敗しました。" End Sub
回答1件
あなたの回答
tips
プレビュー