f

アーカイブ

2014-12-11

LibreOfficeでのVBAの実行方法

#liboadvent2014 この記事はLibreOffice Advent Calendar 2014の12/11の記事として書いた。前日の12/10はnogajunさんの「Writer文書からImpressスライドのひな型を作成する」だった。12/12はHidemune Tanakaさんの「LibOパッチ作成のために自分がとった手順まとめ」だ。

背景

民間企業に就職すると,データ処理やレポート提出などで不自由なMS Excel(Microsoft Excel)を使わざるを得ない状況に出くわす。また,客先に提出するデータのため,MS Excelで作ってくれと作業に指示が入る。少しのデータ処理であれば手作業でその都度処理すればいい。しかし,大量のデータや定型作業であれば,手作業 で行うのは効率が悪い。処理を自動化して楽するにはVBA(Visual Basic for Application)によりMS Excelを操作することが重要となる。

VBAはMS Officeやマイクロソフトからライセンスを取得しているAutoCADのようなアプリケーションでも動作するプログラミング言語である。今までやったことがなければ当然ながら記述方法を勉強する必要がある。

しかし,MS Officeは不自由で有料である。わざわざVBAを勉強するためだけにMS Officeを購入するのはバカバカしい。普段の作業に必要な機能はLibreOfficeで十分である。また,Wine上では動作するらしいが,自宅でメインに使っているLinux(Ubuntu 14.04)ではまだまだ対応状況が不十分である。しかし,業務作業の効率化により楽をして早く帰宅するにはExcel VBAの勉強が必要である。そして,勉強のためにVBAコードを実行できるような環境が必要だ。

幸いなことに LibreOfficeにはVBAの互換機能があり,使える機能は限定されるものの簡単なVBAコードを実行できる。VBAの学習環境としても LibreOfficeは有用である。しかし,ネットで調べても思ったようにすんなり出てこなかった。そこで,LibreOffice CalcでExcel VBAを使う方法を記載する。

なお,動作は以下の環境で確認した。

  • LibreOffice 4.2.7.2
  • OS:Ubuntu 14.04

未確認だが,Windowsでも動作すると思う。

環境設定

最初にLibreOffice Calcでマクロを使えるように設定する。以下を設定する。

  1. マクロのセキュリティの変更
  2. Javaの実行環境・マクロの記録
マクロのセキュリティの変更

[Tools]→[Options...]→[LibreOffice]→[Security]→[Macro Security]

マクロのセキュリティの変更

Mediumにチェック→[OK]

Javaの実行環境の有効化

[LibreOffice]→[Advanced]→以下を設定→[OK]

  • ☑ Use a Java runtime environment
  • ☑ Enable macro recording (limited)
Javaの実行環境の有効化

これでマクロを使うための準備が整った。厳密にいうと,マクロの記録を有効にしたりマクロセキュリティは変更しなくても今回は実行できる。しかし,今後の利便性を考えると有効にしておくとよいだろう。

実行手順

ここまでで,VBAの実行の準備ができたので,マクロを書いてVBAコードを動作させてみる。

[Tools]→[Macros]→[Organize Macros]→[LibreOffice Basic...]を選択。

LibreOffice Basicの選択

現在のファイル名を選択→[New]→[Module1]→[OK]

新規モジュールの作成

これで,LibreOffice Basic IDEが起動する。

マクロの動作例として,以下のコードを記入する。

Option VBASupport 1

Sub Main
  Range("A1") = 199
  cells(2,1) = "abcd"
End Sub

1行目のOption VBASupport 1によりVBAの機能を有効にしている。この設定を行うことで,VBAの記述ができるようになる。次のRange("A1") = 199cells(2,1) = "abcd"はともにVBAの記述である。Option VBASupport 1書いていないとエラーとなる。

この記述をしたあとにRun BASICアイコン(F5キー)をクリックすると,マクロが実行されCalcのセルに値が記入される。

マクロの実行

以上のように,LibreOffice Basicで記述する際に,以下のコードでVBAを有効にすることで,LibreOfficeでVBAを使える。

Option VBASupport 1

これにより,LibreOfficeでVBAを実行でき,VBAの勉強に役立てられる。LibreOffice Calcだけでなく,Writer,Impress,Drawでも有効だと思う。不自由なVBAだが,LibreOffice Calcでの処理の自動化にも使えたり,LibreOffice Basicと似ているところもあるので,使えると作業の役に立つだろう。

参考:

0 件のコメント:

コメントを投稿