ポケモンしりとりのお題をスプレッドシートで生成する(多機能)
こんにちは、マイトです。コロナウイルスの影響で自粛続きのこの世の中、家に居てもすることがない!という人も多いと思います。暇すぎて仕方が無い…そんなときにすることといえば…!
そう、ポケモンしりとりです!約900個しかない限られた固有名詞をいかに繋げていくかを考える…とても知的でクリエイティブな遊びだと思いませんか?
今回は現在放送中の「ポケットモンスター」アニメのED「ポケモンしりとり ピカチュウ→ミュウver.」の「ピカチュウ」と「ミュウ」の部分にあたるポケモンを、ランダムに生成するツールをGoogle スプレッドシートでつくってみました。暇なときってやる気が謎の方向に向かいますよね。
(スプレッドシートをこんな風にいじるのは初めてなので拙い点色々あると思いますが、ご容赦下さい。)
1.スプレッドシート解説
できあがったものは、5つのシートで構成されています。
①「シート1」
ポケモンリストです。全国ポケモン図鑑順のポケモン一覧 - Wikipediaからコピーしてきました。(リストのポケモンは、4/25日現在ムゲンダイナまで。)
手作業でリージョンフォルムを消したり、「ニドラン♂」や「ポリゴン2」みたいに記号が入っているポケモンを「ニドランオス」、「ポリゴンツー」みたいに置き換えていきます。
「ン」で終わるポケモンについても手作業で除外していき、空白を除いた後に番号を1から順に振っていきます。
(手作業じゃなくても、もしかしたら良いやり方があるのかもしれません…)
②「ヒントなし」
お題を生成するシートです。1行目にある数字は、RANDBETWEEN関数で生成した乱数です。2行目は、VLOOKUP関数で上の乱数にあたる数字をシート1(A列は「ン」で終わるポケモンを除外したリストから、C列は全ポケモンリスト)から探し、その右の列にあるポケモン名を返すというようになっています。
③「ヒントあり」
ヒントなしのシートに、「〇で始まるポケモン」と「〇で終わるポケモン」をヒントとして加えたもの。一番つくるのに時間がかかった。
まずB2のセルには、「A3のセルの最後の1文字」をRIGHT関数で取得し、それが小文字だった場合は大文字に変換したものを表示します。例えばA3に「エーフィ」が表示されている場合、普通にRIGHT関数で取得すると、小さな「ィ」になります。これで始まるポケモンは居ませんので、「ィ」を「イ」に変換しなければいけません。これにはSUBSTITUTE関数を使いました。B4のセルには、
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(right(A3,1),"ァ","ア"),"ィ","イ"),"ゥ","ウ"),"ェ","エ"),"ォ","オ"),"ャ","ヤ"),"ュ","ユ"),"ョ","ヨ"),"ッ","ツ")
という式が入っています。脳筋ですね。他に良いやり方があったら教えて下さい。
B7のセルには、B4の文字から始まるポケモンをリストから探し、表示するという式が入っています。これにはQUERY関数を使いました。この関数めちゃくちゃ便利です。
「〇で始まるポケモン」の方はこんな感じでそこまで複雑ではないですが、「〇で終わるポケモン」の方は注意が必要です。
例えば、E3のセルに「ユキノオー」が表示されている場合。「ユ」につながるパターンとしては、次の4通りあります。
Ⅰ)「ユ」で終わる
Ⅱ)「ユー」で終わる
Ⅲ)小さな「ュ」で終わる
Ⅳ)「ュー」で終わる
うーんめんどくさい。でもQUERY関数内で"OR"をつなげまくればそれっぽく出来るので、やっぱりこの関数偉大ですね。という訳で、D7のセルには次の式が入っています。
=QUERY('シート1'!$B$2:$B$891,"select * where B like '%"&LEFT(E3,1)&"'OR B like '%"&LEFT(E3,1)&"ー"&"' OR B like '%"&D4&"' OR B like '%"&D4&"ー"&"'",FALSE)
QUERY関数については、こちらを参考にしました。
【QUERY関数】where句とlike演算子を使用して指定の文字を含む行を抽出する
④「ヒント(”ー”で終わっているとき)」
追記(4/26) ※IF関数を実装したため、このシートは削除しました。
③のヒントの機能ですが、一つだけ欠点があります。伸ばし棒「ー」で終わっているポケモンからスタートの場合に対応していないのです。この場合③のシートでは下の画像のようになります。
この場合は、「後ろから2文字目」を取得しなければなりませんが、そんな関数はどうやら無いみたいです。そこで、A3にある名前の文字数をLEN関数で取得し、MID関数で「文字数マイナス1」の場所にある文字を取得します。
追記(4/26)
別にシートを分けなくても、IF関数とIFERROR関数を使えば良いことに気づきました。
⑤「フリー検索」
赤いセルにカタカナを入れると、その文字で始まるポケモンと、その文字で終わるポケモンが表示されます。ポケモンしりとりをする際に役に立つかも。
※注意 赤いセルに入れて実行すると、他のシートの乱数がリセットされ、表示されるポケモンが変わります。
2.作ってみた感想
スプレッドシートいじくるの楽しいですね(小並)。割と楽しみながら作れたし、初めてにしては上出来じゃないかなーって思ってます。まだ色々工夫のしどころがあると思うので、気付き次第改善していきます。
3.配布
需要があるかは分かりませんが、配布URLのせておきます。
閲覧のみ可能な状態にしてますので、「ファイル」から「コピーを作成」してご利用下さい。
質問や、「ここをこうした方がいい」などあれば、コメントやTwitterで気軽にどうぞ。
それでは読んで頂きありがとうございました。