パソコン悪戦苦闘記録

リブレでVBA、けっこう使える。十分、十分!(CalcマクロでExcelブックを扱う)

 皆さん、PCでExcelを使っていますよね。言わずと知れた、Microsoft社製のOfficeの一つ、表計算ソフトです。
 今やビジネスツールとして、Excelはなくてはならない存在になっています。
 いえいえ、ビジネスの場だけではなく、会員名簿、成績順位表、家計簿など、趣味の分野や日常生活の場でも各種データ整理などに利用されて、個人的な用途でも多く使われています。

 私も会社の仕事において、毎日必ず使います。なくてはならない、必需品です。宴会の後の、割り勘計算にも便利ですしね。
 また、私の自宅でも、個人的な住所録管理などにExcelを使っています。年賀状や転勤の挨拶状で、友人、知人の住所や電話番号、メールアドレスなどが変わるたびに打ち込んで、データをその都度更新しています。



 この住所録管理などのように、データリストを ”データベースもどき” として使うことも、表計算ソフトExcelではよく行われています。
 データベースを扱うには、それ専用のアプリケーションソフト、例えばMicrosoftのAccessなどがあるにはありますが、個人的な小規模データを扱うにはExcelで十分なのです。

 「データベースもどきとして使う」とは、データをリスト形式で蓄積しておいて、その都度必要とするデータを抽出する使い方です。リストから抽出されたデータを、あらかじめ準備しておいた帳票テンプレートの所定箇所に流し込んで、帳票として完成させるような使い方です。
 Excelリストの、一つの行がデータベースの1レコードになり、各列が、データベースのフィールドになるわけです。

 上記のように、データリストから必要とするデータを抽出するときに、マクロを組んでおくと簡単、そして確実です。
 ワークシート上のボタンのクリック一つで、データを取り出すことができますから。

 ところで、私が中古で購入したノートPCの内蔵ストレージを、SSD換装したことは、前に書いたとおりです。
  ⇒ その記事は、こちらをご覧ください。
     SSD換装の作業手順・要領、注意点など、参考になると思います。

 SSD換装後のノートPCには、LibreOffice(リブレオフィス)という無料のOfficeアプリケーションをインストールしたことも、過去記事のとおりです。
  ⇒ その記事は、こちらをご覧ください。
    リブレオフィスとは何かなどを書いています。


 このリブレオフィスというアプリケーション、無料であるにもかかわらず、MicrosoftのOfficeとある程度の互換性があって、これが非常に使えるのです。
 リブレオフィスの表計算ソフトは、「Calc(カルク)」という名称のソフトで、Excelと一定程度の互換性があります。私がExcelで管理していた住所録データも、そのまんまカルク上で開くことができ、カルクでそのまんま利用できています。
 そして、カルクにもマクロ機能があり、そこではExcelマクロと同じ
    VBA(Visual Basic for Applications )
が使えます。
 Excelで管理していた住所録データ(Excelファイル)をカルク上で開いて、そのデータ抽出にVBAマクロが使えるというわけです。
 ⇒ 「リブレでVBAが使える」は、こちらをご覧ください。


 前にも書きましたが、これはすんごい! ことです。
 リブレオフィスの独自言語を覚える必要はなくて、これまで使ってきたVBAでマクロを書けばよいわけですから。

 ただし、カルク用のマクロを作るとき、VBAのすべての機能が使えるとは限りません。VBAのメソッドなどのいくつかの機能はカルクでは動かない場合があります。
 ただし、その制限も限定的なもので、回避策、代替策を工夫することができます。
 ここまでずいぶんと前置きが長くなってしまいましたが、今回、私が強調したかったことはこれに尽きます。
 「リブレオフィスでのVBA使用には一定の制限がある。けれども、その制限は大したことない。」・・・・・これです。
 リブレオフィス用の独自マクロ言語を一から習得し直す労力を考えれば、カルクで動作しないVBA機能について、その回避策を考える、この方がずっと楽です。そもそも、動作しないVBA機能は、数的にはごくわずかですし。

 リブレオフィスという無料アプリケーションで、Microsoftという世界的超大物企業が開発したマクロ言語を使おうとするわけだから、その互換性も限られたものだと、そう考えるのが一般的と思われます。Microsoftとフリーソフトとの関係は、敵対視すべき関係でしょうし(この点に関しては、最近のMicrosoftは柔軟になってきた、らしいですが。)。
 まさに私が、「リブレで使えるVBAはごく一部分だろう」と、そう考えていました。
 しかし、それは先入観に過ぎず、実際にやってみたら、
   「リブレでVBA、けっこう使える。十分、十分!
ということが分かりました。

 それでは、私がExcelで作成した住所録データをリブレオフィスのカルクで開き、そこから必要データを抽出するVBAマクロを用意するに当たって、突き当たった壁(障害事例)と、それに対する私なりの解決策を、例示として2つほど紹介し、これからリブレオフィスを利用される方の参考にしていただこうと思います。

【第1】オブジェクト変数
 マクロでは変数をよく使います。値やデータを格納しておく入れ物(メモリ領域)です。
 変数に格納できるデータの種類を制限するために、変数のデータ型を宣言します。整数型(Integer)や長整数型(Long)、文字列型(String)などです。
 そして、リストをデータベースとして使う上で必須の変数が、オブジェクト型の変数です。
 検索条件にヒットしたデータが入力されたセル(Range)を、Setステートメントを使ってオブジェクト変数に格納しておき、他のプロシージャにおいて、その格納された値(オブジェクトへの参照)を利用するのです。
 検索プロシージャで見つかった特定のセルを変数に代入し、他のプロシージャでも利用することから、変数の有効範囲としてはモジュールレベル変数として宣言します。プロシージャタイトルの前の位置に、つまり、モジュール先頭の位置に、
    Private myRng As Range
と記述します。
 ところが、この変数、カルクでは機能しませんでした。
 仕方なく、データ検索の同一コードをプロシージャごとに繰り返し書いてしのぐことにしたのですが、どうも効率が悪いし、勝手が悪い。これには弱りました。
 そこで、WEBサイト情報をググってみると、リブレオフィスのマクロでも、オブジェクト変数が扱えることが当然の前提とされているようです。
 ならばなんとかなるはず、と工夫するわけです。でぇ、答えが見つかりました。
  Private myRng As Range としていたのを
  Private myRng As Object とすればOKです。
 「As Range」というような固有オブジェクト変数として、オブジェクトの種類をあらかじめ特定して宣言するのではなく、「As Object」というように総称オブジェクト変数として宣言するのです。たったこれだけの違いで、機能したり、しなかったりとなるのです。
 オブジェクト変数をモジュールレベル変数として利用できる、できないでは大きな違いです。これで、大きな障害を一つ乗り越えることができました。あきらめないでよかった。

【第2】FindNextメソッド
 リストをデータベース的に使う上で便利なのが、FindNextメソッドです。同一検索条件で次のデータを検索するときによく利用します。
 ところが、リブレオフィスのマクロでは、これも機能しないのですねぇ。
 当初はこの問題を回避するために、非常に回りくどいコードを書いてしのごうとしました。Findメソッドでヒットしたセルの行番号(Row)を取得し、次の行番号(Row+1)からまた同じ検索(Findを利用)をするのです。これでもまぁ目的は達します。やろうとすることはできるのですが、なんせ効率が悪い。将来、メンテナンスの必要が出てきたときにコード書き換えが困難となります。
 そこで、何とかならないのか、と考えました。
 でぇ、答えが見つかりました。
 Findメソッドのヘルプを読んでみると、引数に「After」というのが見つかりました。この引数を指定すると、FindNextメソッドと同じ結果が得られます。
 このようにある機能が動作しなくても、何とかなるもんです。
 そうです、新しい言語習得の労力に比べたら、大したことない。

 以上挙げた2例のほかにも、動作しないVBA機能をいくつか見つけています。
 たとえば、「WorkSheets("HogeHoge.ods").Activate」としても、Activateが機能しないなどです。これも、「ウィンドウの最小化」という別の方法で代替できるのではないかと、と研究中です。

 おそらく、ほかにもまだあるでしょう。
 けれども、〇万円もするMicrosoftのOfficeと比べ、このリブレオフィスは無料で導入できることを考えてみてください。無料であることを考えたら、この程度の不便は、とるに足りないというものです。マクロを使わない一般機能でしたら、決してMicrosoftのOfficeに引けを取ることはありません。
 リブレオフィスはおすすめです。学生さんなんかにもよいのではないでしょうか。
 
 さらに、もう一つおすすめなのが、SSD換装です。HDDからSSDに交換すると、PCの動きがキビキビと生まれ変わります。
 先日の Windows Update の更新に、HDDのPCでは1時間もかかりましたが、SSD換装したPCではわずか10分間で終わってしまいました。
 SSDの価格が今、非常に下がっています。今のうちかもしれません。

 SSD換装作業は、次の2つの部品と、ドライバ1本があればできます。

【1】SSD本体 容量500GB
Crucial SSD 500GB MX500 内蔵2.5インチ 7mm (9.5mmアダプター付) 5年保証 【PlayStation4 動作確認済】 正規代理店保証品 CT500MX500SSD1/JP
Crucial(クルーシャル)
Amazon価格¥7,396


【2】SATA-USB変換アダプタケーブル
Inateck SATA-USB 3.0 変換アダプタケーブル、UASP対応可能、2.5インチSSD /HDD用 USB 3.0 - SATA IIIコンバータ、SATA IIIハードディスク用アダプター
Inateck
Amazon価格¥1,179



それでは、また次の記事で。
名前:
コメント:

※文字化け等の原因になりますので顔文字の投稿はお控えください。

コメント利用規約に同意の上コメント投稿を行ってください。

 

  • Xでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

最近の「VBAプログラミング・マクロ」カテゴリーもっと見る

最近の記事
バックナンバー
人気記事