変異体のRSメモ帳

B鯖のレベリング勢じゃない狩り専の落書き

かけら出し進捗管理VBAをGASに移植した

ご無沙汰しています。

しばらく更新してませんでしたが、現実の方が忙しかったのとGASに移植するのに夢中になってました。

 

追記で配布とか操作とかしんどかったところとか書いていこうと思います。

 

 

 

仕様

MQ1のREDSTONE作成ループにしか対応していません。

MQ2は僕がやってないので作る予定は今のところないです。

 

キャラ毎にかけら出しの進捗具合(かけら出し→更新可否→報酬交換)を管理できます。

パケット見てRSのかけら個数を見たりとかはできないので、進捗具合の更新は手動になってます。(手動っていうか半自動…?)

 

 

 

用意するもの

  • Googleアカウント
  • 他人が作ったマクロを許可する勇気(重要)

 

多分これだけあれば自分の環境で動かせると思います。

Chrome使うと諸々楽だと思います。

 

 

 

配布

docs.google.com

 

表示されたら上の「ファイル」→「コピーを作成」を選んで、マイドライブの好きなところに置いてもらえればokです。

保存したらマイドライブのスプレッドシートが開きます。

 

 

 

準備

シート

自分の環境に合わせてシートの準備を行います。

行数足りなかったり多すぎる場合は適宜操作してください。

 

入力項目は以下です。

赤字の項目は初回に手動入力が必須になります。

 

  • A列(キャラ名)
    好きに入力してください。
    空白でも多分動くと思います。

  • B列(次回更新日時)
    初回は手動で入力になります。
    抽出機についてる日付に+7日した日付を入れてください。
    以降はマクロで自動更新になります。

    実際の更新には「7日と1分」かかるという話を聞いたので、マクロで更新する時は7日と1分を加算して更新します。

  • C列(状態)
    「かけら出し」、「更新可(または更新待ち)」、「報酬交換」の3種類の状態が用意されています。

    かけら出し:かけらが50未満の状態
    更新可:かけらが50個かつ、抽出機が更新できる状態
    更新待ち:かけらが50個かつ、抽出機が更新できない状態
    報酬交換:REDSTONEを各界に持っていく段階

    各キャラに合わせて初回は手動入力です。
    次回以降マクロで自動更新されます。

  • D-J列(ゲージ表示列)
    地下界/赤い悪魔キャラクター専用機能です。
    鏡または巨商が貰えるまであと何回地下に行けばいいのか視覚的に表示します。
    「悪の奈落(性向-16)」を貰うことを前提として作っているので、毎回消滅とか貰って-10ずつ増えてるキャラクターは表示がずれることがあります。

  • K列(性向数値表示)
    地下界/赤い悪魔キャラクター専用機能です。
    性向数値を表示します。
    数字を入力しなければ天上キャラとみなし、ゲージの描写を行いません。

    各キャラに合わせて初回は手動入力です。
    次回以降マクロで自動更新されます。

  • L列(備考)
    メモ帳です。
    不要なら削除しても大丈夫です。

 

 

サンプルだと背景色がやたらカラフルになっていますが、これはカラーによって所属アカウントを表示しています。

自分で環境設定をする際、不要であれば背景色なしでも一応動く…と思います。(動かなかったらごめん)

 

ゲージの表示色に赤色を使っていますが、似たような色を使ってしまうとゲージが見にくくなることがあります。

ゲージ表示色は(R:192, G:80, B:77)/(#c0504d)を使用しています。

 

 

 

マクロ(動作許可)

まずセル選択カーソルをC列・K列以外のどっかに置いてください。

(C列・K列に置いておいてもエラー吐いて勝手にマクロが止まるのでそんなに気にしなくても大丈夫)

上の水色の更新ボタンを押してください。

 

f:id:spina_rs:20200128235048p:plain

これが表示されるので続行。

 

f:id:spina_rs:20200128235334p:plain

Googleアカウント一覧が表示されるのでログインします。

多分スプレッドシートを保存したGoogle Driveのアカウントと同じじゃないと動かないと思います。

 

f:id:spina_rs:20200128235726p:plain

詳細をクリックするとこんな感じの画面になるので、一番下の「kakera(安全ではないページ)に移動」をクリック。

 

f:id:spina_rs:20200129000004p:plain

許可をクリック。

許可した瞬間にマクロが走ります。(多分)

 

f:id:spina_rs:20200129000928p:plain

走り終わったら上にこんな感じのが出てきます。

出てきたらマクロの動作は準備完了です。

 

 

 

マクロ(自動更新の準備)

スプレッドシートを開いた時またはスプレッドシートを開いているタブを更新(F5)した時、「更新待ち」の状態の更新可否を自動で評価します。

マクロの動作準備が終わったらこちらの準備をお願いします。

 

f:id:spina_rs:20200129005916p:plain

「ツール」→「スクリプトエディタ」を選択。

別タブにスクリプトエディタが起動します。

 

f:id:spina_rs:20200129010050p:plain

左のウィンドウにスクリプトがあるので、「onOpen.gs」をクリックして開きます。

 

f:id:spina_rs:20200129011047p:plain

スクリプト真ん中らへんの「全員の状態を取得」にあるコード「getRange("C3:C39")」の部分を変更します。

シートの最後尾の行番号に合わせて「39」の部分を変更してください。

サンプルシートでは行番号39に最後尾のキャラデータが入っているため、39に設定してあります。

 

f:id:spina_rs:20200129011649p:plain

コードを変更するとエディタのタブにがつきます。

ctrl+sまたは画面上部のフロッピーディスクのアイコンをクリックすると保存できます。

保存ができるとが消えるので、消えていることを確認したらスクリプトエディタのタブは閉じても大丈夫です。

 

 

ほんとはここ自動化できると思うので(力尽きてやめた)、自動化できそうだったらVer1.01とかにして再公開すると思います…。

以上で準備完了です。

 

 

 

 

使い方

進捗状態の更新

更新したいキャラクター行のC列(状態)をクリックして選択状態にします。

今回はsample_01のかけら出しが終わったので、更新したいC3を選択。

f:id:spina_rs:20200129012722p:plain

セルが青枠で囲われていれば選択できています。

そのまま上の更新ボタンをクリックすればマクロが回って更新してくれます。

 

f:id:spina_rs:20200129012936p:plain

更新可/更新待ちの判定は、B列の次回更新日時を基準に自動で評価します。

そのままファーブに持って行ってREDSTONEを貰ったところで再度更新ボタンを押すと、次回更新日時と状態が自動で更新されます。

 

f:id:spina_rs:20200129013251p:plain

更新できました。

地下に走ってかけら出しに戻ってきたところで再度更新すると、性向数値と性向ゲージが更新されて、状態がかけら出しに戻ります。

 

f:id:spina_rs:20200129013400p:plain

このまま同じキャラにかけらを50個出して更新すると、抽出機の更新ができないため状態が「更新待ち」になります。

 

f:id:spina_rs:20200129013613p:plain

「更新待ち」の時はセルを選択して更新ボタンを押しても何も起きません。

更新可否はスプレッドシートを開いた時、またはスプレッドシートのタブを更新した時に評価します。

 

f:id:spina_rs:20200129013850p:plain

更新日時の日付をいじってスプレッドシートのタブを更新します。

 

f:id:spina_rs:20200129014007p:plain

(タブ更新したら選択セルがA1に再設定されます)

状態に反映されるまで若干のタイムラグがあります。

最初スプレッドシート開いた時若干重たいのはこのせいです。

 

…って感じの動作をするので、こんな感じで使っていただければ。

 

 

 

性向ゲージの再描写

性向数値によって性向ゲージの描写を行うことができます。

更新したいキャラクター行のK列(性向数値)をクリックして選択状態にしてください。

K列を選択した状態で更新ボタンを押すと、性向ゲージのみ更新することができます。

 

sample_01の性向を-100に設定して、ゲージを赤くしてみます。

f:id:spina_rs:20200129014721p:plain

更新。

 

f:id:spina_rs:20200129014801p:plain

できました。(わかりにくい)(gif撮るのめんどくさい)

 

 

 

 

連絡先

使い方等は以上になります。

バグ報告や改善要望等ありましたら、Twitterとかにお願いします。

FF外DM受け付けてるので、捨てアカとかでご連絡いただければ。

クソうるさいのであなたの気分を害する可能性があります。

フォローはしない方がいいです。

twitter.com

 

お疲れ様でした。

以下技術的なことをつらつら書くので、ご興味ありましたらどうぞ。(あとで追記)

 

 

 

 

 

技術の話

…というわけでクソほどあったまったので、その話をしようと思います。

とにかくコードを提示しないことには話できないので、コードだけ乗せたページを用意しておきました。

多分コメントあたりは近い表現で揃えたはず…です。

spina-rs.hatenablog.com

 

コーディングがヘタクソなので、VBAの時点で遺憾コードだったのがGASに移管して更に遺憾コードになりました。いかんだけに。……は?

 

 

なんでGASに移管したのか

先日BTOでつよつよPCを買いまして、仮想をブンブン立てても動いちゃうのでかけら飛ばしするのに2PC起動してたのが1PCで済むようになりました。

なので今はそのつよつよPCをメインマシンにしてかけら出しをしています。

 

サブマシン(2PC時代にメインマシンだったやつ)にOfficeが入っててそちらで進捗管理をしてたんですが、メインマシンで済むのでサブマシンを起動しなくなったんです。

メインマシンにはOffice入ってないので、進捗更新するためだけにサブマシン起動するお間抜け状態になってたんですね。

 

スプレッドシートは知ってたんですが、VBAの代わりになるGASの存在を知らなかったので移植するのもな~とか渋ってました。

online Excelとかあるんですけどマクロ実行できないのでナシ。

しばらく調べてたらGASができたみたいなのを拝見したので、あー移植できそうだなーとなって決意しました。

 

 

 

 

あったまる

二年ほど前一瞬だけjs喋ったんですがクソほど嫌いになって、できるなら避けたい言語としています。(普段はJavaPython

GASはjsがベースになっています。

これはめんどくさがった僕も悪いですが、GASのエディタが使いにくい。

そして英語読めないのでGASのdocumentも雰囲気でしか読めません。

もうあったまる要素しかない

 

手っ取り早くvba gas 変換とかでググってもあんま欲しいの出てこなかった覚えがあります。

なんか1ステップ(1行)を変換するのに手数料200円でやります!みたいなのも出てくるので、「高くね…?」となりました。そういうビジネスの相場知りませんが。

情報がないのって致命的なんですよね…。

 

 

 

 

 

特にあったまった部分

getRange() → return Array[ ][ ]

今冷静になって思うとスプレッドシートの行列に対応してるから二次元配列になるんだろうな…。

 

僕が書いてた時は1行分だったり1列分だったり、とにかく1*1の範囲で取ろうとしてたので、「なんで二次元配列になって返ってくるの?」ってずっと言ってました。

1*1で取ってんだから一次元配列でいいじゃんって思いませんか?僕は思います。

 

マジで分からなかったのでググったんですが、なぜかマクロ内で新たに一次元配列を定義してスプレッドシートに書き出すみたいなのしか出てきませんでした。探し方悪かったかもしれない

みんなgetRange()で1行取って処理して書き出したいとかそういう願望ないの?ってなりました…。

 

 

Array.length()

完全にJava脳でした。

ていうかエラー吐いてよ。

 

 

エラーを吐かない

GASエディタが悪いんですが、突然未定義の変数使ったり、length()とか使ったり、間違った文法使ったりしてもエディタが怒らないんです。

そのくせ構文エラーだけはちゃんと怒ってくるので、「なに?こいつ…」ってなりました。

しかも保存しようとした時だけしか怒らないので、いざ保存しようとした時に突然怒られて「???」となります。

 

なんなら未定義変数とかそのままマクロ走らせても見た目だけちゃんと動いてるように見せかけて突然停止してエラーも吐かず死ぬので、本当にたちが悪いです。

 

 

API呼出回数が多いとめちゃくちゃ遅い

実は最初書いたコード脳死で書いてたので、めちゃくちゃAPI叩いてました。

めちゃくちゃAPIを呼ぶとね、めちゃくちゃ遅いんですよ。

もうあり得ないくらい遅いです。

ゲージ描写するだけで20sとか30s平気な顔してかけてきます。

 

これなんで遅いの?って調べていきついたのがこの現実でした。

…全部捨てて書き直しました。

そういうわけなので、実はこのコードリリース時点で既にv2.0だったりします。

v2.0時点のコードもまだ手抜いてるので、本当はもっと詰められるらしいです。

そのうち詰めようと思います…。

 

 

onClick()がない

VBAはセルダブルクリックとかでマクロを呼べるんですが、GASには同じような機能がサポートされていないようです。

調べ尽くしてもonClick()を再現するのは現時点では不可能らしいので、GASに移植した進捗管理表はVBA時代に比べて劣化しています。ツライ。

 

プログラマにとっては割と普通の日常なのであったまり度はそこまでではないですが、このonClick()を再現しようとして1日半くらい調べる作業しかしてませんでした。

onClickサポートされないかな…。

 

 

{}が補完されない

メソッド補完できるのにそこ補完できないの絶対おかしいでしょ

ホントこれ一番あったまったかもしんない

句読点忘れるくらいあったまったわマジで

頭おかしいでしょ

 

これ補完する方法あるんでしょうか?

個人的に { 入力した直後に改行したら補完しないのマジでヤバいと思うんですけど…。

 

 

getRange("D:J").setBackground()

これゲージ描写のところなんですけど、getRange()でゲージまるごと取ってくるのはgetBackgroundsを使います。

これはまだ分かります。

 

そしてgetRange()でゲージまるごと取ってきて新しい色を配置する時はsetBackgroundじゃないと動かないんです。

…なんで?複数セルじゃん……。

ここ未だに訳わかんないんですけど。

なんで?

 

 

getRow()とgetRowIndex()

doc(原文)雰囲気解釈ですけど、これどっちもまるきり同じ挙動してますよね?

利用非推奨とかってわけでもなさそうですし…。

???

 

 

 

 

あたたまりつくした

もともとjs嫌いでしたが更に嫌いになりそうです。

ただどのPCからでも参照できてリアルタイムでデータが更新されるのいいんですよね…。

 

クソ長記事になっちゃったのでこれで。

そのうちプレイレポート更新したいです(願望)。