【エクセルVBA】シート上に現在時刻の時計の絵を自動作成する方法!

こんにちは、ヒガシです。

 

このページでは、以下の画像に示すように、現在時刻の時計の絵を自動作成するVBAコードをご紹介します。

エクセルシート上に時計の絵を作成した結果

今回は静止画を作成するだけですが、工夫すれば一秒ごとに秒針を動かすことも可能です。

 

VBAは意外とこんな遊びをやっているなかで習得されますのであなたもぜひチャレンジしてみてください。

 

スポンサーリンク

時計作成の際の基本スキル①円図形の作成

いきなり時計の作り方を説明してもわけがわからないと思いますので、時計作成マクロの中で使われているいくつかの重要なスキルを紹介しておきます。

 

まずは円図形の作成方法についてです。

以下の記事では、円図形の作成方法について解説しています。

【エクセルVBA】中心座標、半径を指定して円図形を作成する方法

 

本記事の時計作成でも随所にこのスキルが登場します。

興味があればぜひこちらもご覧ください。

 

スポンサーリンク

時計作成の際の基本スキル②矢印図形の作成

円の次は矢印作成です。

こちらも以下の記事で詳細解説しています。

【エクセルVBA】直線図形の作り方を詳細解説!太さ、破線、色、矢印設定まで!

 

短針、長針、秒針はすべてこのスキルで作成します。

ぜひ覚えておきましょう。

 

スポンサーリンク

時計作成の際の基本スキル➂テキストの作成

次はテキストボックスの作成方法についてです。

文字盤内の文字を作成するのに使います。

【VBA】テキストボックスを作成する方法!装飾まで完全自動化!

 

スポンサーリンク

時計作成のVBAコード

基礎スキル紹介はこのくらいにして、本題である時計を作成してみましょう。

以下がそのサンプルコードです。

Sub clock()
    stop_flag = 0
    Application.Cursor = 1
    Pi = WorksheetFunction.Pi()
    rs = 70
    rl = 100
    rsec = 90
    rc = 110
    x0 = 200
    y0 = 200
    now_time = Time
    time_array = Split(now_time, ":")
    h1 = time_array(0)
    m1 = time_array(1)
    s1 = time_array(2)
    '円図形の設定
    xc0 = x0 - rc
    yc0 = y0 - rc
    ActiveSheet.Shapes.AddShape(msoShapeOval, xc0, yc0, rc * 2, rc * 2).Select
    Selection.ShapeRange.Fill.ForeColor.ObjectThemeColor = msoThemeColorBackground1
    Selection.ShapeRange.Line.ForeColor.ObjectThemeColor = msoThemeColorText1
    '文字の設定
    circle_r = 10
    For i = 1 To 12
        xstr = x0 + (rc - circle_r - 2) * Sin(2 * Pi * i * 30 / 360) - circle_r
        ystr = y0 - (rc - circle_r - 2) * Cos(2 * Pi * i * 30 / 360) - circle_r
        cWidth = circle_r * 2
        cHight = circle_r * 2
        If i > 9 Then
            cWidth = cWidth * 1.3
        End If
        ActiveSheet.Shapes.AddShape(msoShapeRectangle, xstr, ystr, cWidth, cHight).Select
        With Selection.ShapeRange
            .TextFrame2.TextRange.Characters.Text = i
            .TextFrame2.TextRange.ParagraphFormat.Alignment = msoAlignCenter
            .TextFrame2.VerticalAnchor = msoAnchorMiddle
            .TextFrame2.TextRange.Font.Fill.ForeColor.RGB = RGB(0, 0, 0)
            .Fill.Visible = msoFalse
            .Line.Visible = msoFalse
        End With
    Next
    '短針の設定
    dshort = h1 * 30 + m1 / 60 * 30
    x1 = x0 + rs * Sin(2 * Pi * dshort / 360)
    y1 = y0 - rs * Cos(2 * Pi * dshort / 360)
    ActiveSheet.Shapes.AddConnector(msoConnectorStraight, x0, y0, x1, y1).Select
    Selection.Name = "long"
    With Selection.ShapeRange.Line
        .ForeColor.ObjectThemeColor = msoThemeColorText1
        .Weight = 5
        .Style = 2
        .EndArrowheadStyle = msoArrowheadTriangle
    End With
    '長針の設定
    dlong = m1 * 6
    x1 = x0 + rl * Sin(2 * Pi * dlong / 360)
    y1 = y0 - rl * Cos(2 * Pi * dlong / 360)
    ActiveSheet.Shapes.AddConnector(msoConnectorStraight, x0, y0, x1, y1).Select
    Selection.Name = "short"
    With Selection.ShapeRange.Line
        .ForeColor.ObjectThemeColor = msoThemeColorText1
        .Weight = 3
        .Style = 2
        .EndArrowheadStyle = msoArrowheadTriangle
    End With
    '秒針の設定
    dsec = s1 * 6
    x1 = x0 + rsec * Sin(2 * Pi * dsec / 360)
    y1 = y0 - rsec * Cos(2 * Pi * dsec / 360)
    ActiveSheet.Shapes.AddConnector(msoConnectorStraight, x0, y0, x1, y1).Select
    Selection.Name = "sec"
    With Selection.ShapeRange.Line
        .ForeColor.ObjectThemeColor = msoThemeColorText1
        .Weight = 1
        .DashStyle = 3
        .EndArrowheadStyle = msoArrowheadTriangle
    End With
End Sub

 

めっちゃ長いですね。笑

 

実行するごとに絵が変わりますのでぜひ一度実行してみてください。

(※実行前は図形をすべて削除してからにしないとどんどん上に重なっていきます。)

 

コードは長いですが、やっていることは先ほどまでに紹介した基礎スキルをひとつひとつ適用していっているだけです。

 

このコードを1秒ごとに実行したりすれば動く時計を作成できそうですね。

(それはまた今度やってみます。)

 

スポンサーリンク

おわりに

というわけで今回はエクセル上の図形を使って時計の絵を作成する方法をご紹介しました。

ぜひ基礎スキル習得に向けやってみてはいかがでしょうか。

 

このように、私のブログではエクセルスキルはもちろん、様々なプログラミングスキルを紹介しています。

ぜひ他の記事ものぞいてみてください。

コメント

タイトルとURLをコピーしました