MENU閉じる

HEXA BLOG

日記

HEXA BLOG日記2019.8.2

エクセルのマクロについて

こんにちは!
大阪開発ゲームデザイナーの折り紙です!
どうぞよろしくお願いします。

早速ですが、皆さんに質問です。
「宝くじ、当ててみたいと思いませんか?」

僕は思います。お金がたくさんあれば、普段食べられない
お高い美味しい物を大量に食べられるからです。

そこで今回のブログでは、業務の経験を活かし、
普段の作業で使用しているエクセルの「マクロ」機能を使い、
宝くじの当選番号を予想する機構を作ってみたいと思います!

エクセルのマクロと聞くと、少し面倒そうという印象を持ちやすいとは思いますが、
以下のサンプルを使えば10分程度でお手軽に試せるものを紹介しますので、
興味のある方はぜひチャレンジしてみてください!

————————————————————
…作る前に。

■普段マクロを業務上使うシーンについて
現在の業務では、データの管理や仕様の設計時にエクセルを使うことが多いのですが
その中で、手作業でやるよりも機械的にやった方がミスがなく楽な作業というのは多く出てきます。

ほとんどの場合はエクセルの関数でどうにかできることが多いのですが、
以下のような場合にはマクロを使うとより快適に作業ができます。

・同じ作業が複数回発生する場合
・大量に関数を使いすぎてエクセルを開くのが重くなったとき。
・設定している関数が循環参照(計算結果の値をさらに自身の数式にいれると発生)になってしまった場合。
・確率を含む数値の調整をエクセル上でシミュレーションしてみたいとき。

他にも様々なケースで利用した方が良い場合はありますが、
僕自身はこういったケースで使うことが多いです。
————————————————————
■準備 ※Excel2013を使用
まずはマクロを編集・実行できる環境をつくります。
エクセルの上部のタブに「開発」が出ている場合はこの手順はスキップでOKです。

・上部のタブから「ファイル」を選択。
・項目から「オプション」を選択。
・リボンのユーザー設定を選択。
・「開発」にチェックマークをいれる。
・「OK」を押す。

これでマクロを使う準備ができました!
この状態でも繰り返し処理は簡単に体験できますので、
少しやってみます。
・「名前を付けて保存」等で、どこでもいいので「マクロ有効ブック(.xlsm)」形式で保存。
・「開発」のタブから「マクロの記録」を選択。
・ショートカットキーに「p」等あまりショートカットととして使わない文字を設定。
・シート上で文字を入力したり、セルを塗ったりする。
・「記録終了」を選択。

この段階で先ほど登録したショートカットキーを押せば同じ作業が繰り返し行われます。
————————————————————
■実際に予想するマクロを組んでみる
まずは今回やりたいことを書き出します。

【仕様/要件】
・数字選択式宝くじ「ミニロト」の予想を行う。
・ミニロトの仕様は以下の通り
┗1~31の数字の中から、重複無く5個の数字を選ぶ。
┗当選金額については結構すごい。
┗当選確率は約1/17万。
・完全にランダムに5の数字を抽選するだけでなく「この組み合わせは結果として表示しない」という調整ができるようにしたい。
┗指定された組み合わせだけでなく「指定された組み合わせのうち4個(この数値は可変で)の数値と一致した場合その組み合わせも表示しない」という選択もできるようにしたい。
・最大値(今回だと31)を後から自由に変更したい。
・抽選を行う予想結果個数を、自由に変えられるようにしたい。

書き出した中で、後で調整を行いたい部分はエクセルのどこかに出しておくと便利です。

あとは実際にコードを書くだけです。
※エクセルの名前を「予想.xlsx」に変更し、新たに「lottery」というマクロを作成します。

<サンプル>※このままコピーしてもらえば動くはず!
————————————————————

————————————————————
動けばOK理論で書いたので、所々無駄がありますが
150行程度で今回のやりたいことは実現できます。

あとはエクセル上に図形で箱などを用意し、マクロの登録を行います。
※図形を右クリックし、「マクロを登録」を選択。

————————————————————
■実際に使ってみる ※抽選日である7/30日に実施
「予想の実行」ボタンを押してマクロを実行します。
このとき「一致」の行の数字を3とかにするとほぼ一致しないので、処理が終わりません。
安全策として一定の試行回数を超えるとまだ続けるかどうかを聞くようにしてますが、おすすめしません。

さて、今回は過去の抽選結果の数字(1000回分程度)を除外する組み合わせに設定し、
さらに適当な数字(マクロを使って出てきた数値をそのまま入れました)を8000個ほど追加して動作を見ます。

一致を「4」(除外組み合わせの数値の4個に一致したら抽選対象としない)設定で
5個の組み合わせを作ります。

そして結果は…!

………全然当たりませんでした!
そんなに甘くはなかったですね。

ただ、9000個の数字との一致チェックは、特に停止なく動きましたので
機能としては使えるものになりました。

今回の目標である「宝くじを当てる」ということは実現できませんでしたが、
わりとお手軽にランダム抽選等は作れます。
皆さんも一度試してみてはいかがでしょうか?

RECRUIT

大阪・東京共にスタッフを募集しています。
特にキャリア採用のプログラマー・アーティストに興味がある方は下のボタンをクリックしてください

RECRUIT SITE