とある表の改造に取り組んでいる。
その表は人間が見ながら使う分には何ら支障がないが、並べ替えすら考慮されていないので、そのまま並べ替えると必要なデータが欠落してしまって使い物にならない。たとえばこんなのである。(季節ネタにしてみました。)
○○町 A番地 なにがし 某男 賀状出す花子 賀状出さない
B番地 かのひと 聞転 賀状出さない
梨子 賀状出す
衣良内 狩人 賀状出さない
冨美子 賀状出す
(注:かのひとさんの所は娘の冨美子さんに狩人さんが婿に来てかのひと夫妻と同居なので○○町B番地衣良内冨美子さま、という宛名書きが必要になる。数件ならこのような表を目で追って手書きしても無問題だが、こういうデータが何千件とあってパソコンから印刷したい場合を想像せよ。)
誰に出したらいいか調べるために、賀状の入ったセルをキーにして単純に並べ替えるとどこのだれだか(苗字が)わからないたとえば「冨美子様」とだけ書かれた宛名書きができてしまって役に立たないので、略されている所をあらかじめ
○○町 A番地 なにがし 某男 賀状出す
○○町 A番地 なにがし 花子 賀状出さない
○○町 B番地 かのひと 聞転 賀状出さない
○○町 B番地 かのひと 梨子 賀状出す
○○町 B番地 衣良内 狩人 賀状出さない
○○町 B番地 衣良内 冨美子 賀状出す
のように埋めておきたいのだが、なにせ千軒単位なので(本当か?)怠け者手抜き王の俺としては手動で埋めるような真似はしたくない。
幸いにも、問題の表はこの例のように区切りには空行が入っているので、
氏名の「名」の列を参照して、
そこが空だったら空行だと判断して、番地列を空でないところまで一行ずつさかのぼり、
空でないところの内容をコピーして空行の一歩手前まで貼り付けていく
とか、苗字は直前の空行までさかのぼり、最初の苗字をコピーして、次の行が空だったら貼りつけ、中身があってかつ下の空行の手前だったら…(以下略)という作業を自動化してやれば一瞬で(とはいかないかもしれないが手書きに比べたら画期的に早く)書き換わるはず…なのだが、どうすりゃいいのか皆目わからん。昔わっとさんから貰った教科書のVBAがどうたらという巻を手に取ってみたが、はたしてそこに解決法はあるのか。あったとしても勉強から始めようというのだから、解決法が見つかったとしても、いっそ手作業を外注する方が早かったりするかもしれないのだが、そこは咖喱にスルーしたい。