大阪に行き過去回 遠い夏の花火の回..
[団塊の段階的生活]

エクセルマクロを作る

2008/7/31(木) 午後 5:58
ヒマになったら、やりかけたPerl言語を習得してしまおうと思って、「ラクダ本」全巻計一万強も買ってあるのだが。
結局プログラミングというのは課題というか目的がないと前には進まないものだ。

たまにやっている観光通訳のお仕事では、パソコンを使ってデータ処理することなく、第一、春のシーズンが終わり、秋に入ってた団体サンの予約もキャンセルになって、なんにも予定も課題もない。

それはそれで結構なことだけど、暑いしムリに何もすることもなく、自宅にこもりっきりのナマコ状態。
多少の義務や責任という負荷がないと、ヘタするとカイメン状態になり、前に進むという基本動作も忘れてしまいそうなのである。

だから、東京の翻訳会社サマから編集チェックの依頼があると、ありがたくお受けしている。
外国語マニュアルの編集チェックこそ私が今まで一番長く携わってきたなじみのお仕事である。

ただし、時間給ベースはそんなに良くない。
ウチの強欲ヨメはこういう。
「デパートのアルバイトと変らんに。時間給上げてくれるようにワタシがいったげよか?」
いやいや、それにはおよびません。
自宅で好きな時間帯に「パンツイッチョ」で出来る仕事って、これはラクチンじゃん。

しかし、最近は紙ベースの印刷物より、PDFそのままとかのファイル状態でのチェックが多くなった。
今回はエクセルシート上の訳語統一の校正でハードコピーはなし。
しかも、あまりなじみのない東洋系言語である。

わたしの専門語なら、英語で「アレ」は「ソレ」使ってたなぁ、と頭に記憶させたものと、別の
文脈を照合して検査するのだが、簡単に読めない言語は簡単に記憶できない。
普通にやると、いちいちキーワードをコピーしてきて横に並べて見比べるというようなことを
するしかない。

アルファベット系の言語なら何とか読めるし、別に発音が言語的に正確である必要もない。
とにかく音を媒介にして頭の一時メモリに保管し、別の文脈まで持っていくだけだから。

今でもフィンランド語の「鍵盤」という訳語は音で覚えている。
たしか「コスケチンタ」だったっけ(^^)

だから、今回は色付けされたキーワードの英語と目的語のペアを文から抽出した表を作成し、
ソートして同じ訳語であるべき単語同士を上下に並べるしかない、と算段した。

それ!エクセルマクロの出番だぜ。

しかし、文字列中の特定の色の単語だけを抽出する方法がわからない。
色付けされたセルなら Interieur クラスの ColorIndex プロパティを調べれはいいんだけど。

切り口が分らないまま、一日目は過ぎていく。
逃れようもなく迫ってくる納期への焦り。
久しぶりのお仕事の負荷。

いやあ、なかなか懐かしい感覚ですよね。

仕事がらみでもないと調べる気にならないマクロやエクセルのHelpを必死になって検索する。
オブジェクトブラウザでColorIndexを調べると Font クラスのプロパティである。
Font は Characters のメンバである。

そか、Cheractersクラスのプロパティで個別の文字の色が特定できるハズだ。
ここでxは文字列中の位置、yは文字数。

セルの内容をCharacters(x、y)の書式に代入し、xを変数でインクリメントして回して
ColorIndex(=7:ピンク)かどうか判別する。

わ、できたぁ! うれしっ。ちゃんと色を見つけて来おったぞ。

この「できたぁ!」という瞬間がプログラミングの醍醐味で、習慣性の中毒病み付きになるのである。
で、現役時代には「用もないのに」来た仕事をすぐマクロやPerlに持ち込むクセがあった。

心ある同僚はこういうのだ「あんたねぇ。そんなん手でやった方が早いんでは?」
「いや、しかし、次に同じ仕事が来た時にはコレで早くなるからぁ・・・」

しかし、次に同じ仕事が来たときには量産したマクロやPerlの残骸に埋まってしまって
どれがどれだか分らない。
第一、昔作ったプログラムなんて仕様が分らず、危なくて使えない、というのが常だった(^^;

切り口が分ればあとはカンタンカンタン。
色つき文字列のペアを抽出し、他のシートのセルに連続的に代入し、色のついてない部分を削除し
ソートするだけ。

そら、できた・・。

と思ったら、なんと文字列を他のシートのセルに代入してコピーしたら色が消えてしまうのだ。

というような、伏兵はプログラミング中にはいたるところにあり、デバッグでの原因究明がかかせない。
しかたがなので、元のセル中で色つき文字だけ残してデリートし、後作表、と作戦変更。

しかし、対象文字列の一部をデリートしていくのは以外にメンドイ。
第一元のセルをいじるのはセキュリティ上あまりやりたくない。

もしや、と思って手で文字列をコピーしてみたらちゃんと色もコピーされている。
そか。セルのデフォルトの value プロパティは文字情報だけで色情報は含まないのだ。

それなら、と手でやったとおり「新規マクロの作成」でマクロ化し、分析する。
結局 selection.copy と worksheet.paste というような原始的命令を使う必要があるようだ。
それに目標シートがアクチブになってないとエラーになる。
いちいちペーストするたびに裏シートをアクチベートするという、あまりエレガントでない
プログラムになるなぁ。

・・・ま、ともかく、キーワード同士の二ヶ国語対比リスト完成。
即ソート。

うむ。見事な出来である。

同じであるべき訳語が上下に並び、違っていれば一目瞭然。
文字を読んで記憶する必要もなく、単純な視認のパターンチェックで終了。

もし、やりたければ上下をマクロで比較して違っていれば警告を出してもいいが、
まさか、そこまでやるほど中毒は進行していない。

結局チェックそのものは数十分の視認で完了。
それじゃ、時間給にならないので、担当者におことわりをする。
「作業テーブル作製するマクロ製作の時間も作業時間に含ませていただきました。
作製した2カ国対照キーワードテーブルも参考に添付納品いたします。」

ちゃんと作業した「証拠」に、という意味だが、実は違う。

ホントは、自分が組んだプログラムの成果を見せびらかしたいだけである。
この心理、プログラマなら分ってくれるよね(^^;

大阪に行き過去回 遠い夏の花火の回..