SSブログ

エクセルの互換性を考える(1) [システムトレード]

エクセルは基本的にバージョン間で高い互換性を保っていますが、複雑なブックを作成すると、どうしても互換性が保持できない場面に遭遇します。
個人で使用する分には、特定のバージョンだけで動作すれば事足りるのですが、不特定多数の人に配布する必要がある場合には、互換性に十分考慮しなければなりません。

互換性を考慮する際、大きく3つの点に注意する必要があります。

1つ目は、ファイルフォーマットの問題です。エクセル97以降2003までは、共通のファイル形式だったため、ファイルフォーマットの違いを気にする必要はありませんでした。
しかし、エクセル2007になって、それが大きく変更になりました。そのため、エクセルでアプリケーションを作成する際、それがどのバージョンのエクセルで使用されるかを意識する必要があります。

ただし、通常のワークシートであれば、エクセル2003フォーマットで配布すれば、エクセル2003や2007、さらにはエクセル97でもブックを開くことができます。
エクセル2007の場合は、それをエクセル2007フォーマットで再保存するかどうか、利用者に委ねることができます。

しかし、マクロによって新しいブックを作成して処理し、それを保存するような場合は、エクセルのバージョン毎に処理を分けないと、上手く動作させることができません。
例えば、エクセル2007の場合は、作成したブックを2007形式か2003(あるいはそれ以前の)形式で保存できますが、どの形式で保存するかを指定してやらないとエラーが生じる場合があります。

その場合、マクロにおいて、Application.VersionプロパティによりエクセルのバージョンNo.を取得し、それによって処理を分岐します。
ちなみに、バージョンNo.はテキスト形式ですので、VAL関数で括って数値化する必要があります。

バージョンNo.は、エクセル2007は12、2003は11、2002は10、2000は9、97は8となっています。また、各バージョン内のリビジョンの違いによって、末尾にアルファベットが付く場合があります。
VAL関数を用いれば、そのような場合でも数字のみを取り出すことができます。

なお、ブックを作成して保存する場合は、Add.SaveAsメソッドを用いますが、その際、保存形式を指定することができます。
ファイル名の後にコロンを付けて FileFormat:=xlExcel12 とすれば、エクセル2007形式となります。

注意点の2つ目は、ワークシート仕様の違いです。エクセル2007になって、扱えるシートの広さが1,000倍程に拡大されました。
関数そのものには、互換性上問題となる大きな変更はないのですが、シートの広さの変更で思わぬ動作をする場合があります。

エクセル2003以前では、扱える最大行数が65,536行でしたが、例えば画面を消去する時に、この行を最大行として、Rows("10:65536").Delete などとする場合があります。
もしも他のセルにおいて、Match関数などで参照範囲を最大行まで取っていた場合、エクセル2003以前では参照範囲が変わることはないのですが、エクセル2007では参照範囲が変わってしまいます。

もっとも、Deleteメソッドを使っていたことがそもそもの間違いであり、この場合はClearメソッドを用いていれば問題はありません。

エクセル2007においては、オプションでファイルの保存形式を指定できますが、ここで指定した形式が、新規作成によって開かれる新しいブックの形式となります。
この設定によっては、ブックの作成や操作、保存時に、様々な問題が生じる場合があります。例えば、ファイルの保存形式を「Excel 97-2003 ブック」に設定すると、以下のような問題点が生じます。

あるブックの表を他のブックにコピーする場合、エクセル2003以前では普通にコピーペーストすれば、表の書式も一緒にコピーされました。
しかし、エクセル2007の場合、列幅が正しくコピーされないという問題が生じます。そのため、列幅はxlPasteColumnWidthsを指定して、別にコピーしてやる必要があります。

ファイルの保存形式の設定は、上記の例に限らず、様々な問題を生じさせる可能性があります。私もまだ全てのパターンについて確認したわけではないのですが、1つ目のファイルフォーマットの問題は、保存形式の設定によって異なってくるかもしれません。

この続きは、明日述べたいと思いますが、今日の記述内容が変更になる可能性がありますことを、あらかじめご了承ください。

nice!(1)  コメント(2)  トラックバック(0) 
共通テーマ:

nice! 1

コメント 2

悪魔くん

アプリケーションもバージョンが変わると色んな弊害とかありますねぇ。自分は全てのマシンがXP pro SP2 & Office2003で今の所、バージョンアップの予定も無いのですが(面倒なので^^;)、晴れてバージョンアップの際には色々質問させてくださいねm(_ _)m
by 悪魔くん (2008-06-24 22:15) 

Kフロー

悪魔くん、こんにちは。nice!ありがとうございます。

私も、エクセル2007には上位互換があると思っていたのですが、実際に使用してみるといろいろな問題に遭遇します(-_-;)
また、不特定多数の方にファイルを配布する場合、下位互換にも配慮しなければなりません。

悪魔くんからエクセルの件で質問を受ける場面なんて、想像したことすらありませんでしたが、何を聞かれても答えられるよう頑張ります(^_^;)

ちなみに、上位互換と下位互換ってややこしいですね。ちょっと調べてみたのですが、人によって定義が随分異なります。これらの他に、前方互換、後方互換という言葉があるのですが、話しはさらにややこしくなります。

一番分かりやすい説明は、「DESKTOP.Good-Day.net」の運営スタッフblogにある、2005年5月20日の記事「上位互換と下位互換と前方互換と後方互換」(SHIMODA Hiroshi氏)ではないでしょうか。
ただ、このサイト、私の環境では重いです(T_T)

by Kフロー (2008-06-25 09:35) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

Facebook コメント

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。