Excel VBA:オートシェイプを作成しタイマーで徐々に回転

オートシェイプをAddShapeで作成し、タイマーで徐々に回転させるVBAです。



Homeに戻る > Excel オートシェイプのTipsへ

オートシェイプとは「図形」のことで、Excel2010からそう呼ばれなくなりました。

Excelではオートシェイプを使って様々な図形を作成することができますが、これを回転させることでもっと楽しめそうです。

ここでは、回転前の図形を作成し、さらに同じ位置で図形を作成し、これをタイマーで徐々に回転させています。


オートシェイプを作成する、AddShapeメソッドの構文

Object.AddShape(Type, Left, Top, Width, Height)

AddShapeの引数

  • Object:(省略不可)Shapesコレクションのオブジェクト
  • Type:(省略不可)作成するオートシェイプの種類
  • Left:(省略不可)オートシェイプの左端位置を指定
  • Top:(省略不可)オートシェイプの上端位置を指定
  • Width:(省略不可)オートシェイプの幅を指定
  • Height:(省略不可)オートシェイプの高さを指定

オートシェイプを回転する、IncrementRotationメソッドの構文

IncrementRotation(Increment)

IncrementRotationの引数

  • Increment:(省略不可)回転角度を指定します。 正の値で時計回り、負の値で反時計回りに回転します。

タイマーで使うWindowsが起動してからの経過時間が取得できるGetTickCountの構文

Declare Function GetTickCount Lib "kernel32" () As Long


関連する「シェイプを移動させる」を掲載していますので、参考にしてください。




オートシェイプを作成しタイマーで徐々に回転させるVBA

ExcelシートのVBAコード

作成したVBAコードの解説

Windowsが起動してからの経過時間を取得するAPI、GetTickCountを宣言します。


mSecタイマー:ExTimerプロシージャ(引数はタイマー時間)

  1. GetTickCountで開始時間を取得します。
  2. Doループを実行します。
  3. 現在の時間から開始時間を取得をマイナスし、タイマー時間より大きくなればループを抜けます。

シェイプを作成し回転する:ExMakeShapeプロシージャ

  1. 元の図形を作成します。
  2. D9:E15のセル位置・セル範囲に、AddShapeを使い左矢印のオートシェイプを作成します。
  3. 回転させる図形を作成します。
  4. D9:E15のセル位置・セル範囲に、AddShapeを使い左矢印のオートシェイプを作成します。
  5. Forループを1から90まで実行します。
  6. 100mSecタイマーを実行します。
  7. IncrementRotationで1度回転します。
  8. ループを抜け完了です。

Option Explicit

'Windowsが起動してからの経過時間 API
Private Declare Function GetTickCount Lib "kernel32" () As Long

'mSecタイマー
Private Sub ExTimer(tim As Long)
    Dim st As Long
    
    '開始時間を取得
    st = GetTickCount
    DoEvents
    Do
        If GetTickCount - st >= tim Then
            '時間が経過した
            Exit Do
        End If
        DoEvents
    Loop
End Sub

'シェイプを作成し回転する
Sub ExMakeShape()
    Dim tshape As Shape
    Dim i As Double
    
    '元の図形を作成
    With ActiveSheet.Range("D9:E15")
        Set tshape = ActiveSheet.Shapes.AddShape(Type:=msoShapeLeftArrow, _
        Left:=.Left, Top:=.Top, Width:=.Width, Height:=.Height)
    End With
    Set tshape = Nothing

    '回転させる図形を作成
    With ActiveSheet.Range("D9:E15")
        Set tshape = ActiveSheet.Shapes.AddShape(Type:=msoShapeLeftArrow, _
        Left:=.Left, Top:=.Top, Width:=.Width, Height:=.Height)
        '90度まで徐々に回転
        For i = 1 To 90
            '100mSecタイマー
            ExTimer 100
            '1度回転
            Call tshape.IncrementRotation(1)
        Next
    End With
    Set tshape = Nothing

End Sub

Private Sub CommandButton1_Click()
    ExMakeShape
End Sub

Excel実行画面

ボタンをクリックすると、2個のシェイプを作成し、2個目を回転させます。

下の左向きの矢印が作成した時点の図形です。上が回転させた図形です。

開始ボタンを矢印の図形


Homeに戻る > Excel オートシェイプのTipsへ

■■■
このサイトの内容を利用して発生した、いかなる問題にも一切責任は負いませんのでご了承下さい
■■■
当ホームページに掲載されているあらゆる内容の無許可転載・転用を禁止します


Copyright (c) Excel-Excel ! All rights reserved