Excel VBAでAmong Usのタスクっぽいプログレスバーを作ってみた

最近話題のゲーム、宇宙人狼こと『Among Us』。
このゲームが人気な点はやはりプレイヤー同士が疑い合い、疑心暗鬼になりながらもインポスター(人狼)を見つけ出すという人狼ゲームのおもしろさです。ただ、それ以上にこのゲームを魅力的にしたのは、そのゲーム内容とは真逆のイメージの”ポップ”なキャラクターや絵のタッチです。

そこで今回はそんな”可愛らしい”Among Usのキャラクターを拝借しExcel VBAのプログレスバーを作成してみました。作中では「タスク」と呼ばれる作業がありますがその中でも「ダウンロードタスク」をイメージして作成しています。

ただ、このプログレスバーはビジュアル面にステータスを全振りしたため基本的に作業処理は重くなるという致命的な欠陥を持っています。

効率UPさせるのがVBAの本来の目的なのに…

しかしながらこのプログレスバーには下記のようなさまざまな手法が潜んでいます。

・UserForm上でgif画像を動かす
・Excel VBAで音楽を鳴らす
・UserFormの[×]ボタンが押された時に条件分岐で処理を行う       
・処理にかかる時間を推測し、残り時間を表示する
 

Among Usに興味のある方もない方もExcel VBAのいくつかのテクニックが学べるはずので、「使えねえプログレスバーだな」と思わずに「こういう方法もあるのか!」と何かしら学べる点を見つけて何かしらのの知識を持って帰って頂けたらもらえたら幸いです。

 

Among Usのタスクっぽいプログレスバー

上記の動画を見れば今回作成した“Among Usのタスクっぽいプログレスバー”のシステムが理解できると思います。プログレスバーに使われている言語が英語なのは原作リスペクトのためです。(実はこのプログレスバーを作ったのが日本語訳がまだないAmong Us初期の頃だったためというのは内緒)

プログレスバーに使用している素材をはじめとしたExcelファイルは下記よりダウンロードできます。ダウンロード後、Excelファイルを開き、シート上にあるボタンを押せば動画のようなプログレスバーが表示されます。

AmongUs_ProgressBar  (クリックでzipファイルダウンロード)

 

プログレスバーのコード

このプログレスバーはUserFormだけで全て完結しません。メインの処理を行なっている標準モジュール上でもいくつかの処理を書いておく必要があるので注意してください。

基本的には下記の「標準モジュールコード」に書かれている「何らかの処理」の部分を実際に行う処理にすればOKです。

またダウンロードしたExcelファイルでうまくいかない場合は下記コードをコピペして実行してみてください。UserFormについてもコントロールさえ存在していれば自動で大きさや位置を設定するようになっているので、下項目の画像を参考にUserFormを作成して下さい。(※この時、各コントロールの配置位置の前後は非常に重要なのでうまく並び替えてください)
 

標準モジュールコード

 

UserFormコード

 

まとめ

今回は「Among Usのタスクっぽいプログレスバー」の紹介でした。

コードについて深い解説はしていませんが読めば何をしているかは理解できると思います。
ここでは冒頭で言っていた手法の答えを簡単にまとめておきます。

・UserForm上でgif画像を動かす
→「WebBrowser」を使用 ※imageの場合はアニメーションが動かないため
  ただWebBrowserは必ず最前面に設置され全てのコントロールが隠れてしまう      
  唯一「Frame」のみWebBrowserより前側に設置できるためうまく利用する

・Excel VBAで音楽を鳴らす
→ Windows API「mciSendString関数」を使用

・UserFormの[×]ボタンが押された時に条件分岐で処理を行う     
→ UserForm_QueryCloseイベントとTagプロパティを組み合わせる

・処理にかかる時間を推測し、残り時間を表示する
→ 現在の処理回数を全体の処理回数で割る
 (参考:【ExcelVBA】残りの処理時間と進捗をステータスバーに表示する方法)

Excel, VBA

Posted by Lic