アンドリューの徒然日記

SDIN-デュエルオブレジェンドの記事をメインに書いています

DOLにレート戦を実装したいpart③~マクロの実装編~

はじめに

こちらの記事は「DOLにレート戦を実装したい

のpart3の記事となります。

 

part1では、なぜ「DOLレート戦」を作りたいのか

part2では、どのような仕組みになっているのか

についてお話しました。

 

各パートごとにある程度に話を完結させているので、

見なくても問題はありません。

 

こちらのパートでは、ボタン1つで解決するための

マクロの実装についてお話したいと思います。

 

こちらのお話も前回パートのシステム構築と同様に

知らなくても使う分には特に問題はないため、

それでも良いという方はこのパートを飛ばしてください。

 

 

マクロとは

マクロというのは一連の動作を

自動化するためのツールとなります。

 

Excel内でのデータ処理や書類作成、メール送信などを

自動化できるという優れものです。

 

優れものですが、使うためには

コードをかかなければなりません。

 

こちらに僕が書いた単純なコードがあります。

Sub」は始まり、「End Sub」は終わりを表し、

Range」はセル位置の取得を、

ClearContents」はセルのクリアを表します。

 

つまり、上のコードは

C68のセルに”〇”を書き込み、

 C70のセルをクリア。

 

 L70のセルに”〇”を書き込み、

 L69のセルをクリア。

 L71のセルに”1”を書き込む。

 

 F63とF64のセルに”〇”を書き込み、

 F65とF66のセルをクリアする

 

という意味になります。

 

プログラム初挑戦の僕にとって

コードを書くのは難しいですが、

 

他のセルに干渉できない関数と違い、

セルに文字を入れたり消したりできますし、

それをボタン1つでできるようになるのは

かなり魅力的です。

 

 

作成したマクロ

作成したマクロ(ボタン)は次の通りです。

 

・勝敗記録(1試合~3試合)

・席登録(Ⅰ~Ⅳ)

・プレイヤー登録

・レート適応

・各種クリア

 

各種クリア」はボタン操作をミスしたとき用に

用意したものなので、それ以外の話をしていきます。

 

 

勝敗記録

それぞれの試合の勝利判定を記録するボタンです。

 

試合の結果に応じて勝ったチームのボタンを

押してもらうことで、

各試合の結果をシートに反映させることができます。

具体的には、

記録表シートの各試合ごとの「勝敗記号」に

Aが勝ったら」を、Bが勝ったら」を

記述します。

 

これにより、IF関数Aが勝った場合

またはBが勝った場合にシートに勝利判定の反映が

できるようになっています。

 

 

席登録

席に座っているプレイヤーをシートに登録し、

各プレイヤーのレートを呼び出すボタンです。

ボタンを押すと

まず入力ボックスが表示されます。

 

プレイヤー名を入力すると

プレイヤー表に記載されている

「プレイヤー名」をマクロで自動検索します。

プレイヤー名が見つかれば、

プレイヤー名が対戦表に記入され、

共にレートが呼び出されます

プレイヤー名が見つからない場合は

見つからない旨のダイアログが表示されます。

 

つまり、プレイヤー表に登録しなければ

席登録はできないようになっている

ということです。

 

 

プレイヤー登録

プレイヤー表にプレイヤー名を登録するための

ボタンになります。

ボタンを押すと

まず入力ボックスが表示されます。

プレイヤー名を入力すると、

プレイヤー名が「プレイヤー表」に記入され、

レート1000、階級の振り分けが行われます

DOLで使用している名前を登録してほしいので、

プレイヤー名が3文字以上、7文字以下の場合

ダイアログを表示して、登録を無効にしています。

また、登録するプレイヤー名と一致する

登録済みのプレイヤー名をマクロで自動検索し、

一致する名前があったらダイアログを表示して、

登録を無効にしています。

 

 

レート適応

対戦後に変化したレートを

プレイヤー表のレートに反映させるボタンです。

 

今回のマクロの実装で

最もやることが多い部分になります。

レート適応では、試合数と対戦プレイヤーの

プレイヤー名対戦後レート連勝数勝利数

取得します。

 

取得したプレイヤー名を基に「プレイヤー表」で

検索し、そのプレイヤー名のを取得。

その列に取得した対戦後レートや連勝数を

項目ごとに反映させています。

 

これを4名のプレイヤー全てに行っています。

補足

試合数と勝利数も記録され、

それを基に勝率の計算を裏でしています。

ただ、勝率はプライバシーにかかわる情報だと考えているので、

公開情報として扱っていません。

 

裏話

そちらの方面にお詳しいふぇんりるさんに相談したところ

なんとコードを書いてくれました。

本当にありがとうございます。

 

しかし、ここにきて驚くべき事実ですが、

実は「DOLレート戦」の実装はExcelではなく

皆に使ってもらうためにGoogleスプレッドシート

行いました。

 

相談段階ではExcelで行っていたため、

ExcelのマクロコードのVBA言語で

書いていただきましたが、

 

(Excelで使用されるVBAとGoogleスプレッドシート使用されるGAS)

Googleスプレッドシートのマクロは

VBAではなくGoogle Apps ScriptGAS)で

記述されているため、

頂いたコードをそのまま使うことは

できませんでした。

 

なので、頂いたコードを翻訳し、

それをGASで記述するということで

なんとか実装をすることができたいう裏話でした。

 

ちなみに、実装の後にこの話をふぇんりるさんにしたところ

「言ってくれればやったのに~」と言ってくれました。

やさしい;;

自分的にはふぇんりるさんにお手を煩わせたくなかったので、

脳筋で翻訳しましたが、結果的に勉強になったのでOKです。

 

 

次回予告

ということで「DOLレート戦」のマクロの実装

について話していきました。

 

次回はついに、DOLレート戦の使い方について

話していきます。

 

ここまでお付き合いくださりありがとうございました。

 

 

という感じで今回はこの辺で!