Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


67676 / 76738 ←次へ | 前へ→

【13616】Re:アナログ時計を表現させたい
回答  ichinose  - 04/5/9(日) 19:17 -

引用なし
パスワード
   ▼えいち さん:
こんばんは。
>アナログ時計表示をさせたいと"width"や"height"利用して、シェイプの角度を変えたりなんだかんだしたりして、針を表現しようとしましたが、mmm難しいです。
>
>仮に、セル "A1" に、任意の時間(hh:mm:ss)が入力されているとして、マクロを実行したとき、 その時刻をアナログ時計で表現したいのです。
>(実際の時間に合わせて1秒1秒動く必要はない)
例題にすぎません。装飾はしていませんが・・・。
丸い時計をイメージして見ました。
長針も短針も秒針もただの線です。
'============================================================
Sub main()
  Call Mk_en(ActiveSheet, 300, 100, 80) ' 丸い時計のつもり
  disp_time = Now()
  For idx = 1 To 5
   Call mk_analog_clock(ActiveSheet, 300, 100, disp_time) '時計の針の設定
   DoEvents
   MsgBox Format(disp_time, "hh:mm:ss")
   disp_time = disp_time + TimeSerial(1, 5, idx) '時刻を少しづつ進ませました
   Next
End Sub
'==================================================================
Sub Mk_en(sht As Worksheet, x As Double, y As Double, rs As Double)
'円を作成する
'sht-----作成するシート
'x,y-----中心座標
'rs------半径
  pai = WorksheetFunction.pi
  With sht.Shapes.BuildFreeform(msoEditingAuto, x + rs, y)
   For idx = 0.15 To 2 * pai Step 0.001
     .AddNodes msoSegmentLine, msoEditingAuto, x + rs * Cos(idx), y + rs * Sin(idx)
     Next idx
   Set para = .ConvertToShape
   para.Fill.Visible = msoFalse
   End With
End Sub
'========================================================================
Sub mk_analog_clock(sht As Worksheet, x As Double, y As Double, disp_time)
'短針、長針、秒針の設定
'sht-----作成するシート
'x,y-----中心座標
'disp_time--時刻のシリアル値
  On Error Resume Next
  Dim pi As Double
  pi = WorksheetFunction.pi
  sht.Shapes.Range(Array("h_hand", "m_hand", "s_hand")).Delete
  h_rad = ((Hour(disp_time)) * 60 + Minute(disp_time) - 180) / 1440 * pi * 4 '短針の角度の計算
  Call mk_line(sht, "h_hand", x, y, x + 50 * Cos(h_rad), y + 50 * Sin(h_rad), 1.5)
  m_rad = (Minute(disp_time) - 15) / 60 * pi * 2 '長針の角度の計算
  Call mk_line(sht, "m_hand", x, y, x + 65 * Cos(m_rad), y + 65 * Sin(m_rad), 1.5)
  s_rad = (Second(disp_time) - 15) / 60 * pi * 2 '秒針の角度計算
  Call mk_line(sht, "s_hand", x, y, x + 65 * Cos(s_rad), y + 65 * Sin(s_rad), 1)
End Sub
'=========================================================================
Sub mk_line(sht As Worksheet, nm As String, x1 As Double, y1 As Double, x2 As Double, y2 As Double, we, Optional vh As Long = 0)
 '線を引く
 Set Ln = sht.Shapes.AddLine(x1, y1, x2, y2)
 Ln.Line.Weight = we '線の太さ
 If vh = 1 Then
   Ln.Width = 0#
 ElseIf vh = 2 Then
   Ln.Height = 0#
   End If
 Ln.Name = nm
End Sub

後は、線の形を矢印にしたり、円に半透明の色を付けたり
工夫してみて下さい
まずは、確認してみて下さい。

1 hits

【13594】アナログ時計を表現させたい えいち 04/5/9(日) 2:13 質問
【13616】Re:アナログ時計を表現させたい ichinose 04/5/9(日) 19:17 回答
【13621】Re:アナログ時計を表現させたい えいち 04/5/9(日) 22:09 お礼

67676 / 76738 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free