残業を減らす!Officeテクニック

Excelでサイコロを振るゲームを作る ~簡略化すれば関数だけでも作成可能

ボタンをクリックするごとに「目」の変わるサイコロゲーム

 今回は、数式と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)))
セルA1に上記の数式を入力する。コピペでOK
結果として、サイコロの目が表示される。結果は1~6のいずれかが表示される
文字が見えないので、フォントサイズを大きくして(ここでは「100」)、セルの幅と高さを調整しておこう

 CHOOSE関数は[インデックス]に指定した位置の値を取り出します。RANDBETWEEN関数は[最小値]以上、[最大値]以下の整数の乱数を発生します。1~6の範囲で発生した乱数を[インデックス]として、後に続く文字を表示しているだけです。

 UNICHAR関数は[数値]の文字コード(Unicode)に対応する文字を返します。WindowsでUnicodeを調べる際(後述)は、16進数で確認できるので、HEX2DEC関数で10進数に変換しています。構文をまとめて見ておきましょう。

CHOOSE関数の構文。1つ目の引数[インデックス]に指定した位置の値を取り出す
RANDBETWEEN関数の構文。[最小値]以上、[最大値]以下の整数の乱数を発生する
UNICHAR関数の構文。[数値]の文字コード(Unicode)に対応する文字を返す
HEX2DEC関数の構文。16進数表記の[数値]を10進数表記に変換する

ボタンにVBAコードを割り当てる

 [開発]タブからボタンを配置して、以下のコードを貼り付けて完成です。指定した回数分、再計算を実行しているだけです。ボタンのサイズやテキストは好みで設定しましょう。

Dim i As Integer

For i = 1 To 300

Application.Calculate

DoEvents

Next i

[開発]タブの[挿入]-[ボタン(フォームコントロール)]をクリックする
ドラッグしてボタンを描く
[マクロの登録]ダイアログボックスが表示されるので、[新規作成]をクリックする。マクロ名はそのままで構わない
「Sub ボタン1_Click() ~ End Sub」と入力された状態でVBAエディタが起動する
上記のコードを貼り付けて、VBAエディタを閉じる
ボタンをクリックする
サイコロの結果が変わる
ボタンを右クリックして[テキストの編集]を選択すると、ボタン上のテキストを変更できる

記号を文字一覧から探す

 数式中で指定したUnicodeの調べ方を紹介します。タスクバーの右下にある「あ」(もしくは「A」)を右クリックして、[IMEパッド]を選択すると、文字一覧が表示されます。今回のサイコロのような記号は[その他の記号]に分類されており、マウスポインターを合わせると、Unicodeをツールチップで確認できます。

[IMEパッド]の文字一覧から[その他の記号]を選択。サイコロの「1」にマウスポインターを合わせると、Unicodeは「2680」とわかる
例えば「2639」と指定すると顔の記号を表示できる

VBAを使わずにサイコロを振る

 今回の仕掛けは、RANDBETWEEN関数で発生した乱数に基づいているので、シートが再計算されれば、サイコロの結果は変化します。わざわざVBAコードを記述したくない人は試してみてください。

 例えば、以下のようにチェックボックスを配置してON/OFFを切り替えると、サイコロの結果も変化します。ループさせないので、“振っている”感じはなくなりますが、マクロ有効ブックとして保存しなくても良いメリットはあります。

チェックボックスを挿入した状態
クリックしてONにすると、サイコロの目が変わる
OFFにすると、シートが再計算されて結果も切り替わる

 サイコロを使ったゲームはいろいろあるので、複数のセルに前述の数式を入力して楽しむのも面白いですね。