Lotus1-2-3のround系関数をExcelに変換する場合の問題点

 Microsoft Windows XPのサポートが間もなく終了するということで、筆者の職場でも古いWindows機を強制的に更新する動きがある。 Microsoft Windowsを更新する場合、Microsoft Officeも連動して更新されることが多いであろう。 Microsoft Officeを更新した場合の不都合の1つとして、古いファイルが読めなくなる可能性がある。 Office2003からOffice2007への移行(XMLベースのファイル形式を採用)に際して、古いファイル形式への対応を系統的に放棄したからである。 特にExcel2007がDOS時代のLotus1-2-3などのファイル形式を放棄した影響は大きい。 筆者の職場でも、昔の経緯を確認するためにLotus1-2-3のWJ3ファイルの内容を確認する必要が生じる場合があり、それができなくなることは痛手である。

 そこで、古いWindows機のうちから状態の良好なものを選んで、ファイル変換専用機として整備して残しておくことを考えた。 そして、いくつかのWJ3ファイルを変換してみたところ、特定のファイルを巧く変換できない場合があることが判った。 巧く変換できない事例のうち「内容の一部が失われる」という結果になる事例について、どの内容が失われたかを確認すると、roundup/rounddown関数を使っているセルであった。

 roundup/rounddown関数は、数値を特定の桁で「切り上げ」または「切り捨て」するものであり、第1引数が処理対象数値、第2引数が処理する桁の指定である。 そして、Lotus1-2-3では第2引数を省略可能である。 省略すれば「0」と看做され、小数点以下の切り上げや切り捨てとなる。 しかし、Excelでは第2引数の省略はできない。 数式入力時に省略しようとすると、エラーとなって明示指定を要求される。

 巧く変換できなかったWJ3ファイルでは、roundup/rounddown関数の第2引数を全て省略していた。 そこで、DOS機を起動してLotus1-2-3で問題のファイルを読み込み、第2引数を全て明示指定してから、その結果を変換したところ、問題無く処理できた。

 第2引数を省略したroundup/rounddown関数が存在するWJ3ファイルを読み込んだ場合、

Excel 97
読み込み時にエラーを起こし、Excel自体が異常終了する
Excel 2000、Excel 2003、Excel 98 on Macintosh
何のエラーも無く読み込み、そのままXLSファイルに出力できる
Excel 2007、Excel 2013
そもそも読み込もうとしない
という結果になる。 Excel2000等で出力したXLSをExcel2007等で読み込むと、エラーを検出し、第2引数を省略したroundup/rounddown関数が存在するセルの内容が失われて「N/A」となる。

 対策としては、問題の関数を手動で書き換える以外の方法は見出していない。 使えるDOS機が存在する場合はLotus1-2-3で書き換えれば良いし、無い場合でもExcel 2000/2003があれば、そこで書き換えてXLSファイルに出力すれば良い。

 今のところ、筆者が問題を見出しているのはroundup/rounddown関数のみであるが、他の関数でも同様の問題が存在する可能性は高いだろう。


2014年1月23日初稿/2014年2月4日タグ訂正

戸田孝の雑学資料室へ戻る

Copyright © 2014 by TODA, Takashi