ソフトを開発しようと思った動機、背景
プログラム経験がまったくない状態でVisual Basic 6.0を購入し、何を作ろうかと考えました。プログラムをはじめたばかりなので、高度なことはできませんでした。しかし、ゲーム性のあるものを作りたいと思い、いろいろ調べたところ、ランダム関数が目に留まりました。- 「ボタンをクリックするごとに違う結果を返してくれる」
このゲーム性を取り入れて、何か役立つソフトは作れないかと、あれこれ考えました。開発当初、ランダムに数字を選ぶ抽選ソフトはすでにありましたが、ファイルを読み込ませて抽選を行うものがなかったので、「これだ」と思って作り、できあがったのが「抽選王」でした。開発中に苦労した点
同じデータを何度も選ばないようにするための「ダブり無し」の機能では、いろいろと苦労しました。まず、選んだデータを抽選対象データから削除していく方式で実現し、抽選速度も速くていい感じでしたが、二度目からの抽選を行うときに、抽選対象データを読み直す必要がでてきました。
そこで、抽選されたデータの行番号を別途保持しておき、次に抽選されたデータの行番号が、前に抽選されたデータの行番号リストの中に存在していないかを検索する方式にしてみました。これにより、抽選対象データ側は抽選前後で内容が変わっていないので、二度目からの抽選もすばやく実行できるようになりました。
しかし今度は、抽選されたデータの行番号を保持しているリストの検索処理に時間がかかるようになってしまい、抽選結果のレスポンスが悪くなりました。これを改善すべく、いろいろと試行錯誤した結果、二分探索のアルゴリズムを用いて、検索処理を向上させました。
ユーザにお勧めする使い方
「抽選数」のところに「1-3-5」というように、複数の抽選数を半角ハイフン“-”でつないだ形式で入力すると、最初の抽選結果の1件、次の抽選結果の3件、最後の抽選結果の5件といった結果を返してくれます。例えば、「A」「B」「C」の三つの賞があり、A賞で1名、B賞で3名、C賞で5名を選びたいときに、上記のような形式で入力して実行すると、1回の実行で3回の抽選を行ってくれます。もちろん「ダブり無し」の抽選も可能ですので、A賞に選ばれた人は、B賞、C賞には選ばれないようにすることもできます。
また「抽選王」には、「Pickup Record」という機能があります。この機能は、テキストファイルから指定された条件に一致するデータ(行)を絞りたいときに使用すると便利です。例えば、3列目に住所のデータが登録されているCSV形式のファイルがあり、「3列目のデータが茨城県、栃木県、群馬県、埼玉県、千葉県、東京都、神奈川県ではじまる住所」という条件を指定すると、関東の方のデータに絞り込んでくれます。絞り込まれたデータは、簡単に「抽選王」に渡すことができますので、「絞り込まれたデータから抽選する」といったことも可能です。「Pickup Record」の機能は、Excelのオートフィルタでは物足りない方や、SQLはわからないけれど、ちょっと複雑な絞り込みをしたいという方にもお勧めです。
今後のバージョンアップ予定
バグや要望については、できる限り対応したいと考えておりますので、何かありましたら、当サイト「A.K Office」のサポート掲示板、お問い合わせフォーム、またはソフトウェア同梱のヘルプファイルに記載のメールアドレスよりお気軽にお問い合わせください。
また、まとまった時間が取れるようになったら、開発言語をVisual Basic 6.0からVisual Basic 2005以上へと移行し、新しい「抽選王」を開発したいと考えております。
(古川 明人)