ExcelのVBAで文字列の解析を行う練習台として、COBOLのステップカウンタや構造解析、テストケース洗い出しツールをお遊びで作っていたことがある。そのついでに、当時2000年問題のCOBOLソースから怪しい部分を抽出しリストアップするツールを作ったことがある。


その前に、VBAの力を知らない人たちに魅力を教えるべく、以前作ったExcelVBAをデモしてみることにした。処理の中には、文字列のバイト数(ASCII、SHIFT-JIS)から文字数を引き、全角の文字数を取得する処理があった。


まずは一人に見せてみた。が、あれ?明らかに結果がおかしい。一度家に持ち帰って調べても問題はない。違いはExcelのバージョン(5と95)と、OSのバージョン(3.1と95)だけである。

翌日、Excel95のヘルプを確認して唖然。文字列の関数の仕様が変わっていたのだ。厳密に言えば、内部コードがuniコードになった、というべきなのだろう。結果、文字列のバイト数は文字数の倍にしかならず、全く違った結果が返っていた訳だ。


慌てて書き直したのは書くまでもないが、ときどき関数仕様が変更されることがある。Excel 2007 は大丈夫そうだが、それ以降はどうなることやら・・。