先日、ツイッターでこんなのが流れてきた。
要録の文字を1秒で変換するnote出たらしいなぁ。
— ロマネスコ先生@Eduvater (@Rromanescoooooo) 2020年3月11日
置換やないかい。完全に置換や。
でもこれちょっとわからへんのやな。
何がわからへんの?
おかんが言うにはただセルに変換したい文字打ち込むだけで全員の所見の文章が変わるって言うねんな。
ほな置換と違うかぁ。https://t.co/ajprr18Ov6
所見で書いた文章を要録の文体に直すものらしい。
簡単に言うと、「です」「ます」調を「である」調に直すシートのようだ。
現状
すげー便利だなーと思いつつ、3学期にこれを活用しなかったのは、
既にうちの学校ではこれに似たエクセルが運用されているからである。
エクセルに長けた先輩が作ったものだが、作られて以来みんなに活用されている。
具体的には1学期、2学期、3学期の所見文をシートに貼り付けると、
自動的に合体して要録文体に直すというものである。
因みに便利なのだが、うちの自治体は最近こそ電子媒体で要録を残すことを許可したが、
それまでは必ず紙で印刷しなければならなかった。
そこで先ほどのエクセルで要録文体を作っても、
前年までの情報が書かれた要録用紙の指定位置に狙って上から印刷をするという
「勇気の印刷」をしなければならなかった。
最近は電子媒体、つまりPC上での管理でいいよ(年度末に印刷はする)ということになったので、
勇気の印刷は必要なくなった。
先輩エクセルの問題点
うちの学校で運用されていたエクセルには2つの問題点があった。
このエクセルの問題点はマクロの中身は簡単なのだが、
マクロ自体を扱える人が少ないので改変が難しいことだ。
因みに中身は
『「理解しました」を「理解した」に変更しろ』
『「取り組みました」を「取り組んだ」に変更しろ』
『「見られました」を「見られた」に変更しろ』
のような命令が何個も並んでいるTHEゴリ押しの変換装置になっていた。
なので登録された文言以外は変更ができない。
吉野はマクロの中身が分かるので、自分の文体に合わせて文言を登録していったが、
周囲の人はそれができないので、ある程度変更した後かなりしっかりとチェックする必要があった。
ロマネスコ先生の変換エクセル
翻って、今回紹介したロマネスコ先生のエクセルは、辞書登録機能が付いている。
おお!これは便利!
しかも関数だけ作られている。
なんか改変もできるかも?
ただこれを見た時ちょっと思ったのが、
辞書が16個は少なくないか…?もっと登録したいなぁ…
シートの分析
折角なので、もっと辞書を増やしたいと思い、
ロマネスコ先生のエクセルを改変してみることにする。
まずロマネスコ先生がどのようにこのシートを作っているか解析する必要がある。
これがロマネスコ先生のシートの中身である。
ぱっと見だと気が付きにくいが、
「②所見・通知表」がB列で「要録用」がR列なので、間に何列か隠れている。
開けてみるとこんな感じ。
C~Q列まで出てきた。
ここにはSUBSTITUTE関数が入っていた。
SUBSTITUTE関数は、ある文章の文字列を指定の文字列に置換させる関数だ。
SUBSTITUTE(変更したい文 , 変化させたい文字列 , 変化後の文字列)と書くとできる。
なので、最初の見本はSUBSTITUTE(所見文 , ました , た)になっているので、
『所見文の「ました」という文字列を「た」に置換しろ』という命令になっている。
以下は『左隣りの文の「変化させたい文字列」を「変化後の文字列」に置換しろ』という命令になっている。
なるほど。分かりやすいし、面白い。
辞書を増やそう
ロマネスコ先生のシートだと、登録した文字列1つに対して、SUBSTITUTEが1回使われている。
なのでたくさん登録すると列が異常に増えることになる。
もちろん非表示にすればいいので、それでも問題は無いが、
今回は少し違うアプローチをとってみる。
先ほどのSUBSTITUTE関数だが、関数1個で1組の文字列しか置換できない。
では複数の文字列を1回で置換することはできないのか。
答えはできる。SUBSTITUTE関数を入れ子にするのだ。
SUBSTITUTE(変更したい文 , 変化させたい文字列 , 変化後の文字列)の
「変更したい文」の中にさらにSUBSTITUTE関数を入れる。
具体的には、こんな感じ。
SUBSTITUTE(SUBSTITUTE(所見文, ました , た), でした , だった)
これで『【所見文の「ました」を「た」に置換した文】の「でした」を「だった」に置換しろ』という命令になる。
こんな感じで入れ子にすると、一回で複数の置換ができる。
スーパーマトリョーシカ現象
とはいえ、たくさんの登録した文言を一回で置換しようとすると
関数を書くのがくっっっっっそ面倒だし、何とかならんかなとググってみる。
そこで見つけたのが、以下の方法。
なるほどー。こういう準備をすればいいのかー。
ということで、さっそくまねっこ
アホみたいな量や…これは手打ちは無理…
とりあえず250まで作って、一番下の関数を使ってみる。
………文字列化した数式を普通の数式に戻すのってどうするんだ?
技術と仕様の壁
上の関数っぽいやつは文字列なので、これを普通の数式にしなくてはいけない。
コピーして値貼り付けして、先頭に「=」つければできるけど、それじゃあ…アレー?
仕方ないので、コピーして…をやってたら
「64以上は、入れ子は無理やで」とかいうエラーが出た!
引数が多いとダメなのは知ってたけど、やっぱり250はダメか。
いろいろ試して、66行目までならいけることが分かった。
そんなこんなありながら、実際に入れてみる。
全部の行に対応させるのもちょっと色々やったが、そこは省略。
出来上がったのがこちら。
やったー!できてるー!
と、言っても分かりにくい。
因みに辞書登録するシートは新しく作ったが、こんな感じ。
66個まで登録できます!
振り返り
とりあえず当初の目標である辞書を増やすは達成された。
しかし登録数に限界があるのが、少し気に食わない。
個人的には無制限に登録できるようにしたい。
因みに今回は66個で終わりにしたが、ロマネスコ先生のように間に列を挟めば、
1回目で、66個分を置換
2回目で132個分を置換( 67~132行目)
3回目で198個分を置換(133~198行目)
と言う感じで置換数を増やすことはできる。
3回もやれば、辞書的には十分かなー。
ただ関数でやるとSUBSTITUTE関数のスーパーマトリョーシカになるので、ちょっとスマートじゃない感じがした。
あと「要録用」でできる文章が関数であり文字じゃないのが気になった。
というわけで、次回はマクロを使って、辞書登録が無制限にできるエクセルを作ってみようと思う。
今回作ったシートは公開したかったが、はてなブログってnoteみたいにファイルをアップできないのかな。
誰か教えて。
(2020.3.13追記)
アップしてみた。ダウンロードパスは1234。
5月半ばくらいまでダウンロード可能なので、以降欲しい方はコメントとか、ツイッターでDMしてください。