エクセルのシステム開発(2)

 前回、同名タイトルでExcelのシステムに開発について触れましたが、今回は開発中に奇妙な現象に遭遇してしまったのでご紹介したいと思います。

現象は、「CSVファイルを読込み、Excelシートに反映する」と言うものなのですが、この時に、既存のデータが存在した場合は既存データの次から追加するという単純なものです。

この機能の前に、別の機能で見出しの1行を残しデータを全て削除してCSVファイルの読込みを行ったのですが、読み込んだデータは2行目からではなくシートの途中からセットされていました。

調査したところ、データの削除で使っている「Clear」メソッドとデータの末尾判定で使っている「UsedRange」が原因のようで、消したはずのデータが存在している事になっているためのようでした。

セルのクリアには何種類かのメソッドがありますが、セルのデータや属性など全てを削除したいため「Clear」メソッドを使っていましたが完全に消えていなかったようです。

【セルのクリアメソッド】

(メソッド) (内容)
Clear 全てクリア
ClearContents 数式、文字列クリア
ClearFormats 書式をクリア
ClearComments コメント文をクリア
ClearOutline アウトラインをクリア

試しに「ClearContents」メソッドと、クリアメソッドではありませんが、行そのものを削除するよう「Delete」メソッドも使ってみました。以下のような現象となりました。

(1)行単位でデータを指定しClearメソッド使用
  Rows("2:" & UsedRange.Row + UsedRange.Rows.Count - 1).Clear

 データは削除されたように見えるが「UsedRange」プロパティの値は変わらない。
 このため、「UsedRange」プロパティを使ってデータの存在確認をすると正しく動作しない。

(2)セル単位でデータを指定しClearメソッド使用
  Range(Cells(2, 1), Cells(UsedRange.Rows.Count, UsedRange.Columns.Count)).Clear

 データは削除されないが、該当シートをアクティブに設定すると(1)と同様の現象となる。

(3)行単位でデータを選択し使用
  Rows("2:" & UsedRange.Row + UsedRange.Rows.Count - 1).ClearContents

 データが正しく削除され、「UsedRange」プロパティの値も正しく更新される。

(4)セル単位でデータを選択し使用
  Range(Cells(2, 1), UsedRange.Rows.Count, UsedRange.Columns.Count)).ClearContents

 データは削除されないが、該当シートをアクティブに設定すると正しい動作となる。

(5)行単位でデータを選択し使用
  Rows("2:" & UsedRange.Row + UsedRange.Rows.Count - 1).Delete

 データが正しく削除され、「UsedRange」プロパティの値も正しく更新される。

(6)セル単位でデータを選択し使用
  Range(Cells(2, 1), Cells(UsedRange.Rows.Count, UsedRange.Columns.Count)).Delete

データは削除されないが、該当シートをアクティブに設定すると削除されるが、「UsedRange」プロパティの値は正しく更新されない。



以上、3種類のメソッドで2パターンの確認を行ったのですが、今回はクリアメソッドは使わず、確実なところで(5)の行単位で「Delete」メソッドを使った処理に変更しました。

もう少し時間があれば、ハッキリとした原因まで明らかにしたかったのですが、原因究明は今後引き続き調べていきたいと思います。

それでは宜しくお願いします。

【株式会社 エム・システム】
本      社  :〒124-0023 東京都葛飾東新小岩8-5-5 5F
           TEL : 03-5671-2360 / FAX : 03-5671-2361
盛岡事業所  :〒020-0022 岩手県盛岡市大通3-2-8 3F
           TEL : 019-656-1530 / FAX : 019-656-1531
E-mail    : info@msystm.co.jp 
URL     : http://msystm.co.jp/
ブログ       : http://d.hatena.ne.jp/msystem/ 
Facebook   : http://www.facebook.com/msysteminc