残業を減らす!Officeテクニック
Excelでサイコロを振るゲームを作る ~簡略化すれば関数だけでも作成可能
2025年7月14日 06:55
今回は、数式とVBAを組み合わせて簡単なサイコロゲームを作ってみます。RANDBETWEEN関数でランダムに1~6の数値を取得し、対応する値をCHOOSE関数で取り出します。
サイコロの目はUnicodeで指定し、HEX2DEC関数で10進数に変換したうえで、UNICHAR関数で指定します。配置するボタンには“再計算”するコードを割り当てるだけです。さっそく作ってみましょう。
セルに数式を入力する
ワークシートでの操作は、任意のセルに以下の数式を入力するだけです。かなり長いですが、処理は単純です。
=CHOOSE(RANDBETWEEN(1,6),UNICHAR(HEX2DEC(2680)),UNICHAR(HEX2DEC(2681)),UNICHAR(HEX2DEC(2682)),UNICHAR(HEX2DEC(2683)),UNICHAR(HEX2DEC(2684)),UNICHAR(HEX2DEC(2685)))
CHOOSE関数は[インデックス]に指定した位置の値を取り出します。RANDBETWEEN関数は[最小値]以上、[最大値]以下の整数の乱数を発生します。1~6の範囲で発生した乱数を[インデックス]として、後に続く文字を表示しているだけです。
UNICHAR関数は[数値]の文字コード(Unicode)に対応する文字を返します。WindowsでUnicodeを調べる際(後述)は、16進数で確認できるので、HEX2DEC関数で10進数に変換しています。構文をまとめて見ておきましょう。
ボタンにVBAコードを割り当てる
[開発]タブからボタンを配置して、以下のコードを貼り付けて完成です。指定した回数分、再計算を実行しているだけです。ボタンのサイズやテキストは好みで設定しましょう。
Dim i As Integer
For i = 1 To 300
Application.Calculate
DoEvents
Next i
記号を文字一覧から探す
数式中で指定したUnicodeの調べ方を紹介します。タスクバーの右下にある「あ」(もしくは「A」)を右クリックして、[IMEパッド]を選択すると、文字一覧が表示されます。今回のサイコロのような記号は[その他の記号]に分類されており、マウスポインターを合わせると、Unicodeをツールチップで確認できます。
VBAを使わずにサイコロを振る
今回の仕掛けは、RANDBETWEEN関数で発生した乱数に基づいているので、シートが再計算されれば、サイコロの結果は変化します。わざわざVBAコードを記述したくない人は試してみてください。
例えば、以下のようにチェックボックスを配置してON/OFFを切り替えると、サイコロの結果も変化します。ループさせないので、“振っている”感じはなくなりますが、マクロ有効ブックとして保存しなくても良いメリットはあります。
サイコロを使ったゲームはいろいろあるので、複数のセルに前述の数式を入力して楽しむのも面白いですね。