図形に数式を設定する方法【ExcelVBA】

セルをExcelの図形にリンク 「Shape → DrawingObject」で設定

Shapes("〇〇").Select → Selection.Formula = "=A1"のようにしなければならず

直接できる方法を模索した結果 DrawingObjects("〇〇").Formula = 数式で可能

使用したサンプルコード


Option Explicit
'Windowsの起動後からの時間を取得する宣言コード
Declare PtrSafe Function GetTickCount Lib "kernel32" () As Long
'WindowsAPIの押されたキーを判定する宣言コード
Declare PtrSafe Function GetAsyncKeyState Lib "User32.dll" (ByVal vKey As Long) As Integer
Public Sub SlotGame()

Dim 左の列 As Integer: 左の列 = Application.WorksheetFunction.RandBetween(6, 12)
Dim 中の列 As Integer: 中の列 = Application.WorksheetFunction.RandBetween(6, 12)
Dim 右の列 As Integer: 右の列 = Application.WorksheetFunction.RandBetween(6, 12)
Dim 左フラグ As Boolean
Dim 中フラグ As Boolean
Dim 右フラグ As Boolean

Dim 秒数用 As Long

Do While 左フラグ = False Or 中フラグ = False Or 右フラグ = False

If 左フラグ = False Then
Call 描画(左の列, "左")
End If
If 中フラグ = False Then
Call 描画(中の列, "中")
End If
If 右フラグ = False Then
Call 描画(右の列, "右")
End If

秒数用 = GetTickCount

Do While GetTickCount - 秒数用 < 100

DoEvents 'OSに制御を渡す
If GetAsyncKeyState(37) <> 0 Then
左フラグ = True
End If
If GetAsyncKeyState(38) <> 0 Then
中フラグ = True
End If
If GetAsyncKeyState(39) <> 0 Then
右フラグ = True
End If

Loop

Loop

'判定する
If 左の列 = 中の列 And 中の列 = 右の列 Then
MsgBox "大当たり"
End If

End Sub
Private Sub 描画(ByRef 列 As Integer, ByVal 図の場所 As String)

ActiveSheet.DrawingObjects(図の場所).Formula = "=" & Cells(2, 列).Address

列 = 列 + 1
If 列 = 13 Then
列 = 6
End If

End Sub

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です