![見出し画像](https://assets.st-note.com/production/uploads/images/117272187/rectangle_large_type_2_f8b917f6f5e9137486ed0e6f05cd9a64.jpeg?width=1200)
リポグラム・パングラム作成補助用スプレッドシートを作った
前説
『リポグラム』という文章技法があります。
Wikipediaから引用すると、以下の通り。
「特定の文字を使わないという制約のもとに文章を書く、もしくはすでに書かれた文章から特定の文字を抜き去って改作するというもの。」
週刊少年ジャンプにて連載中の『暗号学園のいろは』などでも登場しており、同作の原作者、西尾維新の過去作に「りぽぐら!」という全編リポグラムを扱ったとんでもない単行本などもあるので興味が湧いた人は是非チェックしていただきたい。
そんなリポグラムを用いた文章を自分でもちょっと作ってみたいなと思い、
インターネットに生きてきたので当然どこかしらにジェネレーターというか、制約だとか使用文字種を表示したりしてくれるサイトとかあるんやろなあ!
と思いながら検索してみたものの上手いこと見つからなかった。
(思えばジェネレーターでもないしアシストツール?とかそもそもタイトルを冠するのも難儀するのを作ってみてから感じるところはあった。そりゃ検索もしにくい)
ので、スプレッドシートを用いて自作してみたというのが今回の本題。
余談だが、使用した文字の数をカウントする機能も搭載されているので、
パングラム(「規定の文字を全て使う」系のしばり)の生成にも活用できそうなのでタイトルにもパングラムを記載してみた。
手間はかかるが複雑な事はしていないので、
手の内は一通り明かすつもりで執筆している。
が、その手間すら省略したい人向けにスプレッドシート自体の共有URLは有料記事においてみた(100円)。
一応一通り動作の検証はしているが、仕様変更とかで動かなくなったりしたら
その時はそっと有料部分を外そうと思います。
概要
まず今回作成したシートのサンプル画像。
![](https://assets.st-note.com/img/1695732347066-ugrsmEPUsU.png?width=1200)
![](https://assets.st-note.com/img/1695732347048-w56XCRRwaH.png?width=1200)
『ひらがなリポグラム』
『英字リポグラム』
それぞれに対応できるシートを作った。
・A1セルに記述した文章に含まれている文字種のカウント、
・文字の使用回数のカウント
・使用された文字のセルに青色をつける。
・NG文字のセルに赤をつける。
などの機能を実装した。
文字の使用回数をカウントしているのは、リポグラム作成の際にどの文字が登場数が少ないか分かれば、置き換えを考える際に楽だな、と思ったので追加している。
英字リポグラムは、原典だと「E」を使わない、
とかそういう縛り方をしていたはずだが、
今回『暗号学園のいろは』第二巻に収録の第十号「昨日の戦争は今日も戦争」に登場する『失言半減質疑応答』の英訳を試みる実験の為に作られたため、文字種数のカウントなども実装されている。
以下に関数も一応記載しているが、セル番号は必ずしも引用通りに機能するとは限らないので、記載してる目的に合わせて適宜修正してください。
・A1セル
文章入力欄
英字の場合大文字限定、ひらがなの場合は基本音46種に加えて
濁音、半濁音、拗音、促音に対応。
長音は前音の母音として扱う為非対応としている。
(「ば」「ぱ」等は「は」としてカウントといった感じ)
・使用文字表
コンパクトに確認できた方が便利なので、
右の方のカウント列の内容を引用している。
セルの内容を指定してもいいが、今回は「条件付き書式」も同条件を使いたかったので、使用回数欄、文字種の欄の複製を作ってそれを移動させて並べている。(地味な手作業の手間が多い)
・文字種類
文字通り判定する「A」~「Z」、「あ」~「ん」等の一覧。
このセルの内容を判定に使用している。
他の言語とか独自に対応させる文字を増やす場合はこの列をいじるといい。
多分。
・制限
プルダウンで「○」と「×」を選択できる。
「×」をつけた文字は使用不可としてセルの色が赤くなるようになる仕組みを後述している。○をつけても空欄と変化はない。
・使用判定
A1セル内に種類列の文字が登場したか否かの判定(0,1)。
IF関数とREGEXMATCH関数を用いているが、別に他の手法でもいいと思う。
(K4の文字を判定する際の例)
=IF(REGEXMATCH($A$1,K4),"1","0")
英字については0,1で良いが、ひらがなについては多少処理が変わっていて、
末尾に派生文字の使用判定のセルの内容を+で追加記述している。
(上述の「あ」の判定の末尾に、「ぁ」の使用判定(Q79)を追記する場合の例)
=IF(REGEXMATCH($A$1,K4),"1","0")+Q79
濁音、半濁音、小さいぁ行、ゃ行、「っ」もそれぞれ元の文字の場所に合算する事で、「はばき」を「は」2回、「き」1回 という風にカウントできるようにしている。
最初は全て基本音46種のみにするつもりだったが、
普通に使い勝手が悪かったので後付で上記バリエーションにも対応したので変なとこもあるかもしれない。
・使用回数
=LEN($A$1)-LEN(SUBSTITUTE($A$1,K4,""))
LEN関数で文字数を数える処理から、
文字種欄の文字を空白に置換した際の文字数を引く、
と使用した回数が出るという仕組み。
使用判定同様、バリエーションのカウントも基礎音に合算している。
・アウト判定
=IF(OR(L4="○", L4=""), M4+2, IF(L4="×", M4+5, ""))
使用時にセル色が青になる判定もこのセルの値を利用している。
全ての文字に基礎点で2、
使用された場合使用判定の値をプラス、
制限文字に指定されている場合追加で、
英字の場合+5。ひらがなの場合+10。
を行ってスコアを出している。
英字の時は使用判定足しても5を超えなかっったので、5以上でNG(赤色)としていたが、ひらがな方でバリエーション判定を後付けしたので、こちらは10点以上でNGが出る仕様になった。
(基礎点2がいるかどうかはちょっとわからない)
(多分不要だけど今からいじるのが手間)
・使用文字種数
=COUNTIF(Q4:Q49,"1")+COUNTIF(Q4:Q49,"2")+COUNTIF(Q4:Q49,"3")
基本音の使用判定の欄の「1」「2」「3」の入力されているセルの数を数えて合算している。
(英語だけなら1だけで良かったのだが…)
「>=1」とかでまとめてカウントできねぇの?と思ったらなぜか上手くいかなかった。
幸いバリエーション含めた最大が3(「は」「ば」「ぱ」、「つ」「っ」「づ」の2パターンのみ)なので、長くなるが1の数、2の数、3の数を数えて合算すればええでっしゃろ。という判断。
おわり
これで一通りの手の内は明かしたので
頑張れば再現も出来る。はず。
なんならスプレッドシートやらエクセル、
Web上のスクリプト処理に自身ニキネキ達からすればもっと良いものを作れるかもしれない。
(一通り満足行くものは作ったけどなんならもっと便利なの作って欲しい)
けどまあないから&自分が欲しいからで作ったスプレッドシートです。
ワンコインで地味にそこそこ手間かけたスプレッドシートそのものをまるっとコピーできます。
さあ、これであなたもリポグラム
ここから先は
¥ 100
この記事が気に入ったらチップで応援してみませんか?