以下のような「円グラフを活用したルーレット」を作成する方法について紹介していきます。

※こちらで開発したファイルは、記事の最後にて配布しています。
1. 準備
以下の円グラフは、上の表(「はずれ」と「あたり」の割合)をもとに作成しています。
また、「▼」は別で作成した図形を重ねています。

上の表の「あたり」の割合は、以下のような数式で求めています。
=1-C3
// 1と「はずれ」の割合の差

そのため、「はずれ」の割合を変更するだけで、「あたり」の割合が自動で設定されます。

2. 実現方法
今回は、円グラフの「グラフの基線位置」を活用して、ルーレットを実現していきます。
円グラフは、「データ系列の書式設定」にある「グラフの基線位置」を変更することで回転させることができます。

こちらの値を、マクロで操作することで実現していきます。
3. コードの記述
以下のコードを記述します。
Option Explicit
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
Sub Roulette()
Dim ch As Chart
Set ch = Worksheets("ルーレット").ChartObjects("グラフ 1").Chart
Dim startN As Long, lastN As Long
startN = ch.ChartGroups(1).FirstSliceAngle
lastN = Int((360 + 1) * Rnd) + 360 * 6
Dim n As Long
n = startN
Do While n < lastN
DoEvents
ch.ChartGroups(1).FirstSliceAngle = n Mod 360
Sleep 5
If lastN - n > 360 * 3 Then
n = n + 10
Else
n = n + 10 - Int((n - 360 * 3) / (lastN - 360 * 3) * 10)
End If
Loop
End Sub
では、コードについて解説していきます。
※複雑なコードのため簡単に解説します。
Option Explicit
変数宣言を強制する際に記述するものです。
変数宣言を省略したい場合は、記述する必要はありません。
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
Windows APIにある「Sleep」というプロシージャを使えるようにするための宣言です。
Dim ch As Chart
Set ch = Worksheets("ルーレット").ChartObjects("グラフ 1").Chart
Dim startN As Long, lastN As Long
startN = ch.ChartGroups(1).FirstSliceAngle
lastN = Int((360 + 1) * Rnd) + 360 * 6
対象のグラフを変数「ch」に割り当てて、そのグラフの基線位置を変数「startN」に格納しています。
変数「lastN」には、6周分の角度に、ランダムな角度を加えた角度を格納しています。
変数「lastN」が、回転を止める位置になります。
Dim n As Long
n = startN
Do While n < lastN
'省略
Loop
変数「n」に変数「startN」の値を格納し、その変数「n」の値が変数「lastN」の値より小さい間、「Do」から「Loop」の中を繰り返し実行します。
DoEvents
ch.ChartGroups(1).FirstSliceAngle = n Mod 360
Sleep 5
If lastN - n > 360 * 3 Then
n = n + 10
Else
n = n + 10 - Int((n - 360 * 3) / (lastN - 360 * 3) * 10)
End If
繰り返しの中では、変数「n」の値を徐々に増やしています。
処理の流れは、以下になります。
| 1.変数「n」の値(角度)をグラフの基線位置に反映(0~359の間になるように360で割った余りを活用) 2.5ミリ秒(0.005秒)停止 |
この次が少しだけややこしくなります。
ルーレットでは、回転が徐々に減速する演出にするために、以下のような処理にしています。
| 残りの回転角度が3周より多い場合は、変数「n」に10を加算 そうでない場合は、徐々に加算する数を減らす |
4. ボタンの作成
記述したプロシージャ(Roulette)を割り当てたボタンを作成します。
こちらでは、立体的な見た目の図形(四角形:角度付き)を挿入して、その図形に割り当てています。

5. 完成
以上の手順で完成です。
作成したボタンをクリックすることで、円グラフが回転します。

▼サンプルファイル▼







































































