過去に、「まちゼミ」といった無料講座でも行った内容です。
Excelのセルを色付けして、サイコロを出す方法です。
よく、サイコロ画像を使ったサンプルプログラムはありますが、Excelの特徴を活かせてセルの色付けで行ってみました。
作るのはこんな感じ
枠(幅を変える)を決めて枠線を書く
実際に見えるサイコロを書いていきますので、セルの幅を調整して、幅、高さを揃えます。
描画するエリアが解るように枠線を入れておくと色付けしやすいです。
サイコロの目を描く
サイコロの出目を書いていきます。色を付けてサイコロを作っていきます。
この時、マクロ記録を開始し、マクロを自動生成しておくと簡単にできます。
マクロ名は、サイコロの目が1ならば、one とか解りやすいマクロ名をつけていく
クリアするまで、マクロ記録をする。
クリア処理までマクロ記録でプログラミングコードを作ってもらいましょう。
後で、使えます。
以下、1~6の出目の状態を作りながら、マクロ記録して保存していきます。
間違えたらマクロ記録を止め、マクロの開始からやり直しです。
スタートボタン、ストップボタンを作る。
ActiveX コントロールを使って、ボタンを作る。
ボタンを描いた後、ボタンの上で、右クリックし「プロパティ」を表示し変更していく。
|
スタートボタン |
ストップボタン |
<意味> |
(オブジェクト名) |
btnStart |
btnStop |
解りやすい名前 |
Caption |
Start |
Stop |
表示される文字 |
Enabled |
True |
False |
最初の状態 |
指定したのはこの程度です。
プログラミングしていく
動作のイメージです。この通りになるようにプログラミングしていきます。
- 「スタート」ボタンを押す。
- サイコロの出目を変えて表示する。
- 「ストップ」を押す。
- サイコロの出目決定
「開発」タブ、Visual Basicクリック で、プログラミングコード用の画面が表示されるのでプログラミングをしていきます。
必要に応じて、関数(モジュール)の追加や、マクロで記録された内容を変更をおこなっていきます。
保存する
保存は、xlsm といった拡張子で保存する必要があります。
この保存する箇所で、そのまま、Excel として保存すると、動作しませんので注意が必要となります。
以上、例では、Microsoft Office 2010 で作った内容となりますが、最新バージョンでも同じように作れたかと思います。
無料体験でも、この仕組みを実際に作って頂いておりますので、お気軽に、相談して下さい。
おまけ
スタートボタンが押された時
Private Sub btnStart_Click()
btnStart.Enabled = False ‘’ スタートボタンを使用できなくする
btnStop.Enabled = True ‘’ ストップボタンを使えるように
‘’ 一定間隔でモジュールを呼び出す。
Application.OnTime Now + TimeValue("00:00:01"), "RndStart"
End Sub
ストップボタンが押されたとき
Private Sub btnStart_Click()
btnStart.Enabled = True ‘’ スタートボタンを使えるように
btnStop.Enabled = False ‘’ ストップボタンを使えないように
‘’
Call RndEnd
End Sub
Application.OnTimeで呼び出されるモジュールを作る
Public Function RndStart()
Dim high As Integer
Dim low As Integer
Dim ret As Integer
StopFlag = False
high = 6
low = 1
Range("B2:I9").Clear '' クリア
Do Until StopFlag
ret = Int((high - low + 1) * Rnd + low) '' ランダムに1~6を取得
Call display(ret) '' 表示
Call Sleep(50) '' 少し待つ
Call dispClear(ret) '' クリア
Call Sleep(10) '' 少し待つ
DoEvents
Call Sleep(10)
Loop
'' 最後に
ret = Int((high - low + 1) * Rnd + low)
Call display(ret)
End Function
出目を表示、クリア、終わりの処理
one,two・・・は出目を表示したり消すモジュールで、描画したときにマクロ記録で作られたモジュールになります。
'' 表示する
Private Sub display(intNo As Integer)
Select Case intNo
Case 1: Call one(True)
Case 2: Call two(True)
Case 3: Call three(True)
Case 4: Call four(True)
Case 5: Call five(True)
Case 6: Call six(True)
End Select
End Sub
'' クリア
Private Sub dispClear(intNo As Integer)
Select Case intNo
Case 1: Call one(False)
Case 2: Call two(False)
Case 3: Call three(False)
Case 4: Call four(False)
Case 5: Call five(False)
Case 6: Call six(False)
End Select
End Sub
'' 終了
Public Sub RndEnd()
StopFlag = True
End Sub
自動生成されたマクロを編集
自動生成で作られたモジュール
Private Sub one() Range("D4:G7").Select With Range("D4:G7").Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .Color = 255 .TintAndShade = 0 .PatternTintAndShade = 0 End With Range("D4:G7").Clear End Sub
修正後
Private Sub one(blnFlg As Boolean) If blnFlg Then With Range("D4:G7").Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .Color = 255 .TintAndShade = 0 .PatternTintAndShade = 0 End With Else Range("D4:G7").Clear End If End Sub
1~6のモジュール全てを修正して使えるようにしていきます。
その他、モジュールの先頭部分に、このコードも忘れずに、
しばらく待つ関数、Sleep と、グローバルで使う変数
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Private StopFlag As Boolean
コピペ機能を活用すると、数分で作成できます。
細かい内容は、考えて見て下さい。
Excelの自動化は、マクロ記録で、実際に操作する作業をコード化し、必要な箇所を修正していく
そんな作り方が、間違いも少なく、出来上がることかと思います。
是非、挑戦してみてください。




