ほうこうレポート

ほうようポケモン、こうもりポケモン。

図鑑説明文の単語からポケモンを逆引きするExcelを作ろうとして失敗した話

はじめに

普段ポケモンで小説を書いているんですが、常々思うことがあって。

特定の単語が含まれている図鑑説明文だけ抽出したい!!!

例えば、船に関係するポケモンを知りたい。
こういう時にまま有効なのは、図鑑説明文に「船」と入っているようなポケモンを探すこと。
現状これをできるのはポケモンWikiなわけですが、
ポケモンWikiだとポケモン以外の船がめちゃくちゃヒットして面倒な気持ちになる。

なら自分で作ればいいのでは???
と思ってとりあえずExcelで作ろうとしたら


図鑑説明文の逆引き抽出にはちゃんと成功した
が、失敗した。

という記事。

なぜ失敗したのか?

図鑑説明文の文量が意味わからないくらいあるから。

  終
制作・著作
━━━━━
 ⓃⒽⓀ




そりゃ死ぬわ。
ピカチュウまでやったところでExcelの起動に死ぬほど時間がかかるようになったため、続行不可能と判断した。
新しいポケモンは説明文が少ないといっても、まだこれの30倍くらいはあるのに。

配布

スプシじゃFILTER関数がなかった。かなしい。

drive.google.com


逆にどこまではやれた?

見てもらうのが早いと思うので、↓こんな感じ。



結構Excelでいろいろできるもんですねという気持ちになった。

仕組み

備忘録かねて雑に書いておく

データベース

まずはデータベース作成から。

ポケモンリスト管理

フォルム名を含めたヒット欄を作りたかったのもあって、
まずはポケモンのリストを管理するシート。
↓これ見ればわかると思う。

図鑑説明データベース

A列はFilter関数で空白を削除したポケモンリストが出ている。
B列も同じ、図鑑ナンバー
C列以降に ソフト名 図鑑説明
の順番で交互に書いていった。

データベース作成用ショートカット

AutoHotKeyを使って

  • 選択部分をコピー
  • Excelに移動
  • ペースト
  • 一つ右のセルに移動

までをキー1つでやってくれるようにした。
これで「Wikiの該当部分を選択→ショートカットキー」の繰り返しでデータベース入力ができる。ちょい高速化した。意味なかったけど。

#Hotif WinActive("ポケモンWiki")
F4:: {
; 1. 選択範囲をプレーンテキストに置き換えてクリップボードに格納
A_Clipboard := "" ; クリップボードをクリア
Send("^c") ; Ctrl+Cで選択範囲をコピー
ClipWait ; クリップボードにデータが入るのを待つ
A_Clipboard := A_Clipboard ;プレーンテキスト化
plainText := StrReplace(A_Clipboard, "`r`n", "`n") ; 改行コードを統一
Clipboard := plainText ; プレーンテキストをクリップボードに格納

; 2. 「PDST」を含むタイトルのウインドウをアクティブにする
pdstWinID := WinExist("PDST")
if pdstWinID {
WinActivate(pdstWinID)
WinWaitActive(pdstWinID)

; 3. ペーストを行う
Send("^v") ; Ctrl+Vでペースト
Sleep(200)

; 4. 矢印の右キー(→)を1度押す
Send("{Right}")
} else {
MsgBox("「PDST」を含むタイトルのウインドウが見つかりませんでした。")
}
}
#Hotif



ポケモン名を指定して全図鑑説明を出す

これは比較的簡単。

これ自体はXLOOKUPとかINDEXでぶいぶいやるだけでいいので特にいうことはなくて

Excelで予測変換をする仕組みについて。

別シートに関数用シートを作成して
B列がポケモン名一覧。
B列↓

=FILTER(PokeList!A:A,PokeList!A:A<>"")


C列が↓をC列の全体にフィルした。

=IF(ISERROR(FIND(PHONETIC(SelectPoke!$E$2),B1)),"",ROW())


なにをやっているかというと

  1. 検索文字に入れた単語をカタカナに一括変換(PHONETIC)
  2. 隣のポケモン名セルにその文字が含まれるかどうかを調べて
  3. 含まれている(検索にヒットする)場合は行番号を表示する



お次はヒットが頭文字かどうかを分けるブース。
I列でC列を参照にヒットしたポケモンだけ抜き出し
H列でI列の抜き出しを成型
G列で、抜き出したポケモンの頭文字を抽出しています。


そして検索ポケモン一覧を作るブース。

頭文字一致とそうでないポケモンに振り分けて、
頭文字一致ポケモンが前になるように配列を組み替えている。
なんか諸々エラーが出たのでそれを消してたら列がいっぱいになりました。


言葉から図鑑説明を逆引きする

こっちが問題。

仕組み的にはさっきの一マスずつチェックして該当するものだけ行番号を取り出すやつと一緒。

元のデータのシートがこれで


検索ヒットシートがこんな感じ
図鑑説明のある偶数列(D・F・……)のみこのサーチを入れてある。

あとは行内に何かしらヒットがある場合は先頭列に行番号を取り出すようにして、ヒットのあるポケモン名一覧を作る準備も。


後は、ヒットシートにヒットしているマスだけ元のデータベース文章を表示するように各シートを作って

各シートに浮き出たヒット文章を
TOCOLで整形してやれば完成。

おわりに

こんな感じで、形から入ってシステムはExcel上に作れたのに
ポケモンの数が多すぎて失敗した記事でした。
ピカチュウの図鑑説明文だけで50種類くらいあった気がする、たしか。許せん。
誰か図鑑説明逆引き検索アプリ作ってくれませんかね~~;;
コマンドプロンプトのCUIでいいから;;