スタッフブログ

タダより高いモノは無い!? 一期4回 OpenOfficeの可能性を探れ!

2012.01.17

技術の小林です。


前回はOpenOffice(LibreOffice)でセルやシートを扱うVBAコードの検証を行った。

今回は予告通り、最終行を求めるコードを検証してみる。

 

例によって、まずはExcelで元となるブックとマクロを作成する

koba_04_001.jpg

1つのシートにまばらにデータを配置する。

この時の最終行である20という数値を取得してみる(繰り返し処理のブレイクする値になる訳だ)。

 

最終行を取得するVBAのソースは以下の通り。

MsgBox "最終行:" & Worksheets("い").UsedRange.Rows.Count

 

この.UsedRange.Rows.Countプロパティに最終行が入る訳なのだが…まあ実行してみよう。

 koba_04_002.jpgのサムネイル画像

 koba_04_003.jpg

正しく最終行が出力された。

 

ところが、セルの属性を変えたりすると空白セルでも数えてしまうという不具合がExcelには存在する。

 

koba_04_004.jpg

21行目の空白セルの属性を変えて同じマクロを実行すると…

 

koba_04_005.jpg

これはひどい。

 

なので、これを回避すべく、色々と詰め込んで関数化したものも用意した (FindLastRowTest2) 。

これら2つの最終行を求めるマクロが動くか検証してみる。

 

 koba_04_009.jpg

例によって、最初の起動にもたつくOpenOffice(LibreOffice)のマクロセレクタから実行

 

koba_04_010.jpg

.UsedRange.Rows.Countプロパティは使えるようだ。

 

 koba_04_011.jpg

関数は動かなかった。

 

koba_04_012.jpg

エラー箇所。

Evaluate() が使えないのかな? (借り物のソースだからなあ、これ) 

 

とりあえず、UsedRange.Rows.Countプロパティはそのまま使えたので、気を付ければそのままいけるかも。

関数使うのやめて単純化するという…。

 

ふと、思いついて、OpenOffice(LibreOffice)では最終行が正しく出るのかやってみた。

koba_04_020.jpg

セルの属性を変えてマクロ実行。

 

koba_04_010.jpg

お!!!

 

正しく出るじゃないの!!! 

関数なんて用意する必要なかったんや!!

かしこい!! かしこいよOpenOffice(LibreOffice)!!

 

結果として、最終行の求め方は、OpenOffice(LibreOffice)では非常にラクに移行できるというのが分かった。

Excelがダメだという話もあるけれど…。

 

これだけの検証に随分スペースを使ってしまったので今日はこれまで。

なかなか進まない…^^;

 

投稿者:技術部