ExcelのVBAサンプルプログラミング~サイコロっぽいの~

過去に、「まちゼミ」といった無料講座でも行った内容です。

Excelのセルを色付けして、サイコロを出す方法です。

よく、サイコロ画像を使ったサンプルプログラムはありますが、Excelの特徴を活かせてセルの色付けで行ってみました。

作るのはこんな感じ

Excel プロ技BESTセレクション
今すぐ使えるかんたんEx Excel プロ技BESTセレクション [2019/2016/2013/365対応版]
今すぐ使えるかんたんEx Word プロ技 BESTセレクション[2019/2016/2013/365対応版]

よりスキルアップを目指すのならば、参考になるテキスト本です。

枠(幅を変える)を決めて枠線を書く

実際に見えるサイコロを書いていきますので、セルの幅を調整して、幅、高さを揃えます。

描画するエリアが解るように枠線を入れておくと色付けしやすいです。

サイコロの目を描く

サイコロの出目を書いていきます。色を付けてサイコロを作っていきます。

この時、マクロ記録を開始し、マクロを自動生成しておくと簡単にできます。

マクロ名は、サイコロの目が1ならば、one とか解りやすいマクロ名をつけていくと間違いもなくなります。

クリアするまで、マクロ記録をする。

クリア処理までマクロ記録でプログラミングコードを作ってもらいましょう。

後で、使えます。

以下、1~6の出目の状態を作りながら、マクロ記録して保存していきます。

間違えたらマクロ記録を止め、マクロの開始からやり直しです。

スタートボタン、ストップボタンを作る。

ActiveX コントロールを使って、ボタンを作る。
(ここで少し戸惑います)

ボタンを描いた後、ボタンの上で、右クリックし「プロパティ」を表示し変更していく。

 

スタートボタン

ストップボタン

<意味>

(オブジェクト名)

btnStart

btnStop

解りやすい名前

Caption

Start

Stop

表示される文字

Enabled

True

False

最初の状態

指定したのはこの程度です。

プログラミングしていく

実際にプログラミングのコードを記述していく作業、コーディングになります。

動作のイメージです。
この通りになるようにコーディング(記述)していきます。

  1. 「スタート」ボタンを押す。
  2. サイコロの出目を変えて表示する。
  3. 「ストップ」を押す。
  4. サイコロの出目決定

「開発」タブ、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の自動化は、マクロ記録で、実際に操作する作業をコード化し、必要な箇所を修正していく

そんな作り方が、間違いも少なく、出来上がることかと思います。

是非、挑戦してみてください。

※最新バージョンのエクセルでは、エラーとなり動かない現象があます。
 64ビット版のエクセルは、

Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private StopFlag As Boolean

とするか?

Application.Wait を使って処理するか?

で解決できます。(32ビット版のエクセルを使用しているため、気が付きませんでした。)

同じエクセルでも、少しややこしくなってきましたね・・・

できる イラストで学ぶ 入社1年目からのExcel VBA できる イラストで学ぶシリーズ
独学するならテキスト本でじっくりしてみるのもよいでしょう。

岡山でパソコン・スマホの基本スキルを身につけるなら、通いやすい仕組みの料金設定も魅力的だとよく言われる岡山市北区のパソコン教室「キュリオステーション岡山店」へ。

同じ料金設定で学生(小中高)も大学生も大人もスキルアップできる初心者向けのプログラミング教室、子ども向けの知的好奇心を育むロボット教室マンツーマン個別レッスンの英会話教室もしているパソコン教室です。

タイトルとURLをコピーしました