はじめに
さてもうそろそろ新年を迎えますが、「正月に家を出たくない」「くじだけは引きたい」という悩みはありませんか?(おそらくないかもしれませんが。。)
今回はExcel Vba をつかって Excel さえあれば簡単につくれるおみくじについて紹介します!
実際に作ってみた Excel マクロファイルは下記になります。
Excel おみくじの使い方
ダウンロードするとわかると思いますが、「くじを引く」ボタンをクリックすると下の黒枠(B12:B18)に結果が表示されます。
注意点ですがシート名(おみくじ)を変更しないでください。変更すると正常に動作しなくなります。
Excel おみくじの作り方
シート構成と VBA のソースコード(プログラミングの中身)について順にご紹介します。
シート構成
実はこのExcelファイルは2つのシートから構成されています。
- 「おみくじ」シート
- 「くじマスタ」シート(非表示)
「くじマスタ」シートは非表示にしてありますので、確認したい場合はシート名のところを「右クリック」→「再表示」→ 「くじマスタ」を選択し「OK」を押してください。
「おみくじ」シート
おみくじを引くメインのシートです。注意点は結果が表示されるセルの位置(B13:B18)は動かさないようにしてください(タイトルは別に変更してもOKです)。
「くじマスタ」シート
くじの結果を登録しているシートです。
- A列 : 番号 ← おみくじの番号です。わかりやすくつけているだけで動作上は不要ですが消さないようにしてください。
- B列 : おみくじ ← おみくじの結果です。下に新しく値を付け足しても問題なく動きますが、こちらも消さないでください。
動作概要
動作概要ですが、下記のようになります。
- 0 ~ 5 のランダム値 result を取得する
- 「くじマスタ」シートのB列2行目以降の値を動的配列 omikuzi に格納する
- 配列 omikuzi(result)の値を取得し、「おみくじ」シートに値を出力する
順に説明します。
(1) 0 ~ 5 のランダム値として「3」を取得した場合、 変数 result に 「3」 を代入します。
(2)「くじマスタ」シートのB列2行目以降の値(大吉、吉、中吉、小吉、凶、大凶)を配列 omikuzi に格納します。つまり、配列 omikuzi の中身は以下のようになっています。
- omikuzi(0) = 大吉
- omikuzi(1) = 吉
- omikuzi(2) = 中吉
- omikuzi(3) = 小吉
- omikuzi(4) = 凶
- omikuzi(5) = 大凶
(3)result を 配列 omikuzi のインデックスにし、その値を「おみくじ」シートに値を出力します。たとえば result = 3 の場合、result をインデックスとするため omikuzi(3) = 小吉となります。
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
Const MASTERSHEET As String = "くじマスタ" Const OUTPUTSHEET As String = "おみくじ" Const OUTPUTCELL As String = "B12" Sub おみくじ() Dim result As Integer: result = Int(Rnd * 6) Dim omikuzi() As String: ReDim omikuzi(0) For i = 2 To getMaxRow(MASTERSHEET, "A") omikuzi(UBound(omikuzi)) = Worksheets(MASTERSHEET).Cells(i, 2).Value ReDim Preserve omikuzi(UBound(omikuzi) + 1) Next i ReDim Preserve omikuzi(UBound(omikuzi) - 1) Worksheets(OUTPUTSHEET).Range(OUTPUTCELL).Value = omikuzi(result) End Sub Function getMaxRow(sheetName As String, row As String) getMaxRow = Worksheets(sheetName).Range(row & "65536").End(xlUp).row End Function |
最後に
いかがでしょうか?
これでいつでもどこでも年中くじが無料で引き放題ですね!!ぜひ新年の変わり目にいっぱつ運試しに引いてみてはいかがでしょうか?