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
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
Sub ToggleSheetView()
Dim ws As Worksheet
Set ws = Worksheets("設定")
Dim m As Long
m = Month(Date)
Dim ckRng As Range
Set ckRng = ws.Range("B3")
ckRng.Value = Not ckRng.Value
Dim i As Long
For i = 1 To 12
On Error Resume Next
With Worksheets(i & "月")
If i = m Or ckRng.Value Then
.Visible = xlSheetVisible
Else
.Visible = xlSheetHidden
End If
End With
On Error GoTo 0
Next i
ws.Activate
End Sub
では、コードについて解説していきます。
Dim ws As Worksheet
Set ws = Worksheets("設定")
Dim m As Long
m = Month(Date)