トップ会長挨拶医師会事業計画活動内容医師会報地域包括ケア介護保険について月間行事予定医療を考える集い学校保健関連

<ペンリレー>

発行日2008/11/10
下浜診療所  木村 康徳
リストに戻る
俺はサンデー・プログラマー
 
 毎年秋の秋田市の一健康診断の際、エクセルでポスターを作り院内に掲示していました。私が1週間ほどかかって作り上げていた表組みを、翌年「今年はこんなんでどうでしょう」と1日で作り上げてしまう事務員が当院にはいます。彼女は、院内のさまざまな事務処理をいとも簡単にエクセルで作表し、整理してくれていました。
 当院に受診している老人ホームの患者さんの名簿も彼女が作りました。80人ほどの患者さんを定期的な処方のある人とない人に分け、患者さんの名前・カルテ番号などをA4の用紙1枚にまとめたものです。
 その彼女が出産のため半年ほど休職することになり、もう一人の事務員が代わりに名簿を作ることになりましたが、思った以上にその作業が煩雑なことが分ってきました。名簿は名前の五十音順に縦2列になっているため、新しい患者さんを挿入すると行が1行ずつ下にズレていき、さらに行末は1行下にはみ出てしまうため次の列の行頭に移動させ、その後の全員も1行ずつ下にズラさなければなりません。新しい患者さんが増えた・退園した・死亡した・定期処方の必要がなくなったなどの変更のたびに名簿を整形し直すのは結構面倒なものでした。
 エクセルにはVisual Basicというマクロ言語が付属しており、プログラミングすることにより定型的な処理を一瞬で行うことができるようになります。このとき作成したのは簡単なマクロ・プログラムですが、行末に新しい患者さんの名前を記入し表の上部にあるマクロを登録したボタンをマウスでクリックすると、その名前を五十音順の適切な場所に移動させ、表全体も2列に整形し直してくれます。名簿には付記という欄があり、「退園・死亡・定期処方なし」などの変更が生じた場合それに対応するコード(数字)をそこに打ち込み整形マクロのボタンを押すと、一瞬のうちに退園・死亡された患者さんは削除され「退園・死亡」と書かれた別のワークシートに移動し、定期処方の必要がなくなった患者さんは「定期処方なし」の欄に移動し、最後に何事もなかったように全体を2列に配列し直します。
 産休から復帰したパソコン実力派の彼女は「先生、すご~い!超便利」と喜んでくれました。エクセルでこのような処理ができるなど思ってもいなかったようです。私がこれまで作ってきたプログラムは、①比較的簡単なこと、②あると便利で仕事の軽減につながるが市販のソフトには適当なものがないこと、といった点が共通しています。
 私がパソコンを始めた二十数年前は、パソコンはNECの98シリーズ、OSはMSMS-DOS、フロッピー・ディスクは5インチと大きく、英文ワープロはWord Star、一太郎はVer3で俗に三太郎と呼ばれていた頃でした。実験のデータ集計・文献管理にはdBASEⅢというデータベースソフトを、統計処理には多変量解析のできるHALBAUを使用していました。
 プログラミング言語はDisk Basicがパソコンに付属していましたが、プログラムには行番号が必要で、四角や円を描き、それに色をつけては動かすなどの簡単なプログラムを作った頃にはもうギブアップしていました。
 
 dBASEⅢには強力なマクロ言語が付属しており、企業などでもこのマクロ言語でプログラムを組み業務を行うということが当時は盛んでしたし、プログラミングの本も多数出版されていました。本は買い込んでいたもののなかなか手をつけられずにいましたが、腰を傷めて数週間仕事を休んだことがあり、その際これ幸いと4冊を読破してしまいました。これまでのDisk Basicと異なり行番号は不要で、小さなサブルーチンやファンクションを作り、それらを寄せ集めて大きなプログラムを構築するという手法は分りやすく、作成途中の不具合の修正も容易で、後にこれが構造化言語というものの一つだと知りました。現在のプログラミング言語は、CにせよVisual Basicにせよほとんどこの構造化言語でできています。この構造化言語との出会いが、その後の私のプログラミング人生の基礎になりました。
 dBASEⅢで作った中で最大のものは、はがきの宛名印刷プログラムでした。今では年末に書店に並ぶ年賀状のイラスト集におまけとしてついてきますが、当時は郵便番号まで印刷できる宛名ソフトは市販されておらず、親戚知人の住所録をdBASEⅢに入力したのを機に自作し、しばらく年賀状の宛名印刷に使っていました。

 Medlineという医学文献検索システムがあります。今はインターネットで検索するのが一般的ですが、当時は秋大医学部図書館にCD-ROMが10年間分リースで置かれており、図書館のパソコンにCD-ROMを差し込んでは文献を検索していました。年が明けると新しい1年分のCD-ROMが追加されますが、最も古い1年分のCD-ROMはリース会社に返却するというシステムでしたので、図書館の係りの人は返却前にそのデータをdBASEⅢに打ち込んでいました。
 CD-ROM版のMedlineはパソコンで検索したデータをフロッピーに保存できましたので、そのファイルを持ち帰り自宅パソコンのエディタ(MIFES)で見るのが日課でした。MIFESにはMIL言語というこれまた非常に強力なプログラミング言語が付属していましたので、この言語でMedlineのファイルをシークエンシャル・ファイルに変換するプログラムを作り、自宅でdBASEⅢに読み込ませて白血病関連の文献のデータベースを作っていました。
 図書館の人にもお見せしましたが、データ変換にはエディタのMIFESが必要なため、同様の動作をするソフトをQuickBasicで作り直しました。QuickBasicはコンパイルするとMS-DOS上の独立したプログラムになります。コマンド・ラインからプログラムを立ち上げ、保存してあるMedlineファイルを読み込ませるとdBASEⅢ用のファイルに変換してくれます。ファイル・コンバータとしての機能に加え、著者名を“W.A.Mozart”、“Mozart WA”などの形式の中から選ぶことができ、雑誌のページ記載法なども数種類の中から選択できるようにしたため、プログラムの完成度が高く自慢の作品でした。図書館の方にも差し上げ、数年後に聞いたところ「実用プログラムとして使いこなしましたよ」とのうれしい返事をいただきました。

 QuickBasicで作成したなかでもうひとつ忘れられないものに学会用のポスター作成プログラムがあります。
 今はTrueTypeなどのスケーラブルフォントが常識で、拡大しても文字の輪郭がギザギザになりません。当時のプリンターは24ドットのドットプリンターが主流で拡大に耐える品質ではないため、学会での発表には高い値段を払って写植で原稿を仕上げるのが一般的でした。
 医局にはNECの日本初のA4レーザープリンターがありました。フォントはスケーラブルではありませんでしたが、48ドットで当時はその美しさに驚いたものです。当時の三太郎の印刷では4倍角が拡大できる最大の大きさでしたので、4倍角で原稿を作り数回拡大コピーを繰り返し学会発表用のポスターを作りました。しかし、4倍角ではきれいなのに、拡大コピーを繰り返すと輪郭がぼやけて発表用としては貧弱な印象になるのが欠点でした。
 三太郎では4倍角までですが、レーザープリンターとしては9倍角・16倍角まで印刷する能力を持っているのに気づき、その技術情報がプリンターのマニュアル後半にぎっしり書き込まれているのを見て、三太郎で9倍角・16倍角の印刷を可能にする補助プログラムを作りました。難しそうに聴こえますがやっていることは簡単で、三太郎で原稿を印刷する前にそのプログラムを立ち上げ、好みの倍角を選びエスケープ・シークエンスと呼ばれる制御コードをプリンターに送ってやるだけです。これだけでA4の紙には9倍角・16倍角で印刷され、これをA3の用紙に1回拡大コピーするだけで非常にきれいな発表用のポスターができあがりました。

 大学を離れ道川の国立療養所に赴任した頃にはWindowsの時代になり、MS-DOSで培ったプログラミング技法は生かす場がなくなりプログラミングからはしばらく遠ざかっていました。しかし、赴任後病院職員の定期健康診断の判定をしなければいけなくなり、その人数の多さにうんざりするとともに「こんな決まりきった仕事はコンピューターに任せればよいのに!」とまた思うようになりました。事務が健診結果をエクセルの一覧表に書き出してきたことを契機に、エクセル付属のプログラミング言語Visual Basicで健診の判定プログラムと受診者に渡す報告書の印刷プログラムを書くことになりました。
 最終的に1.6MBのプログラムができあがり、フロッピー・ディスク1枚に納まりきらない大きさで、私がこれまで作ったプログラムの中では最大のものです。検査の数値は事務がエクセルに入力してくれるため、そのデータをプログラムに読み込ませるだけで、自動的に判定が済んでしまいます。その後受診者個人に渡す報告書を印刷し、要精査・要治療などと判定されたなかの異常なデータを元のデータと突合せると、入力時の入力位置のズレ・数字の桁間違いなどが見つかります。そこを訂正してその人だけ報告書を印刷し直して終了、その後の業務がとても楽になりました。
 検査の正常値はワークシート1枚にまとめられており、その値をVLOOKUP関数で参照することで「貧血(要精査)、貧血(軽度)、正常、多血症(軽度)、多血症(要精査)」などと判定されます。正常値が変わったり判定基準を変更したい場合はこのワークシートの数値を変更するだけで対応可能にしてあったため、その後道川から本荘の国立療養所に転勤になったときも同じプログラムを使うことができましたし、現在でも病院近くにある保育所の職員健康診断の際に使用しています。

 これまで記載したプログラム言語のほかにもTurbo PascalやCでも習作程度のプログラムを作りましたが、いずれも実用レベルには届きませんでした。特にCは「いつかはCで」と憧れを持っていますが、次から次とやってくる介護保険などの書類や今書いているような原稿の依頼に追われ、まとまった時間が取れないでいます。Visual BasicはMicrosoftOffceで共通の言語ですので、WordやデータベースソフトのAccessでも使用可能です。エクセルでもさらにいくつかプログラムを書く必要に迫られていますし、次はCよりAccessかなという気もしています。

 プログラムに興味のないかたは、「なにもそんなに苦労して作らなくても。几帳面な人だ」と思われるかも知れません。しかし実態はその正反対で、定型的な事務処理がイヤでイヤでたまらないのです。できるだけ楽をしたいという「ものぐさ」な精神が、プログラム作りの原動力だと私の場合は言えそうです。
 
 ペンリレー <俺はサンデー・プログラマー> から