Excelで三角くじを作ってみよう
Step 10 引かれたくじを回転させながら中央に移動する
クリックされたシェイプのオブジェクトを直接取得できないようなので、全シェイプを名前が一致するまでループし取得しています。直接取得する方法がおわかりの方教えてください。
オートシェイプのクジがクリックされると、回転しながら描画位置の中央に移動させます。
回転は IncrementRotation で10度単位で50回行います。
位置は現在位置を50で割り、分割分だけ50回移動させます。
その後、削除します。
Homeへ >
Excelでアプリケーションソフト2 >
三角くじを作ってみよう
シートのVBAコード
下記のVBAコードを追加してください。
Option Explicit
'Windowsが起動してからの経過時間 API
Private Declare Function GetTickCount Lib "kernel32" () As Long
'タイマー
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
'中央に移動
Private Sub ExMoveCenter(tshape As Shape)
Dim xc As Long
Dim yc As Long
Dim i As Long
Dim xf As Double
Dim yf As Double
'くじ描画範囲の中央位置を算出
xc = (Sheets("くじ引き").Range("A1:K20").Width - tshape.Width) / 2
yc = (Sheets("くじ引き").Range("A1:K20").Height - tshape.Height) / 2
xf = (xc - tshape.Left) / 50
yf = (yc - tshape.Top) / 50
For i = 1 To 50
tshape.Left = tshape.Left + xf
tshape.Top = tshape.Top + yf
'回転させる
tshape.IncrementRotation 10
'タイマー
ExTimer 10
Next
'削除
tshape.Delete
End Sub
下記のVBAコードに変更してください。
Public Sub ExShapeClick()
Dim kname As String
Dim tshape As Shape
'クジの名前を取得
kname = Application.Caller
Range("A1") = kname
'クジ番号
Range("A2") = Mid(kname, 5)
For Each tshape In Sheets("くじ引き").Shapes
'名前をチェック
If tshape.name = kname Then
'中央に移動
ExMoveCenter tshape
Exit For
End If
Next
Set tshape = Nothing
End Sub
Homeへ >
Excelでアプリケーションソフト2 >
三角くじを作ってみよう
■■■
このサイトの内容を利用して発生した、いかなる問題にも一切責任は負いませんのでご了承下さい
■■■
当ホームページに掲載されているあらゆる内容の無許可転載・転用を禁止します
Copyright (c) Excel-Excel ! All rights reserved