LibreOfficeでVBAを使う方法。1行おまじないを書くだけ!
ホーム > LibreOffice/マクロ > LibreOfficeでVBAを使う方法。1行おまじないを書くだけ!2017/03/02 2017/09/26
前回は、LibreOfficeのMicroOfficeからの再現性が高くなって、図形はほぼ100%再現できたことを書きました。
非IT企業に勤める中年サラリーマンのIT日記 1 Pocketパワポで作った図形がLibreOfficeで100%読み込めた衝撃MicroSoft PowerPointで作ったファイルを、とある事情でLibreOfficeで開くことがあり、その際にあまりの再現性の高さにビビりってしまいました。いつの間にこんなレベルまで到達していたのか!と驚きを隠せず。特に、ひと昔前はあまり再現性の高くなかった図形が、ほぼ100%再現できていることに衝撃を受けた次第です。たとえばこんな感じ。上がPowerPoint2010、下がLibreOffice5.1。このブログのアイキャッチ画像はだいたいパワポで作っていたのですが、これがLibreOfficeでほぼ再現。グラデーションも再現できています。昔はこんなん...
ここで、「あとはVBAさえサポートできれば完璧だ」というようなことを書きましたが、なんとすでにVBAが使えるようになっていたことを知って驚いております。
さっそく試してみました。
[ad#top-1]
目次
- 1 普通にVBA書くとエラー出ます
- 2 LibreOfficeでVBAを使ってみよう
- 3 どこまでVBAをサポートしているのか?
- 4 今日の結論:意外と使えそう
普通にVBA書くとエラー出ます
試しにLibreOffice Clacのマクロエディターで、VBAを記述して実行してみました。
A1セルに「Test」という文字列を入力するという意味の、Range(“A1”) = “Test” というおなじみのコードです。
結果はご覧の通りエラーが発生しました。
LibreOfficeのマクロ(LibreOffice Basic)で、A1セルに文字列を入れたい場合は以下のようなコードになります。VBAとは大きく違いますね。
LibreOfficeでVBAを使ってみよう
LibreOfficeでも、”あるおまじない”をするとVBAが使えるんです。
それは、エディタのトップに、Option VBASupport 1 という一文を入れるだけ。これだけでVBAが使えます。
上記のプログラムを実行すると、ご覧の通りちゃんとA1セルにTestというテキストが入ります。
どこまでVBAをサポートしているのか?
VBAをサポートしているとはいえ、すべてフルサポートしているとは思えず、どこまで機能が使えるのか気になるところです。以下のコードをサクッと作ってみましたが、とりあえずちゃんと動きました。Cellsによるセル参照や、For文とWhile文は大丈夫そうです。
Option VBASupport 1 sub Main Range("A1") = "Test" For r=2 to 7 Cells(r, 1) = r-1 Next r r = 2 Do While Cells(r, 1)<>"" Cells(r, 2) = Cells(r, 1) * 10 r=r+1 Loop end sub
実行するとこんな感じです。
それ以外にも・・・
Application オブジェクトは使えた Range("A1") = Application.Round(1.222, 0) Range("A2") = Application.Min(1.222, 1.32, 2.5, 0.98) Range("A3") = Application.Max(1.222, 1.32, 2.5, 0.98)Functionプロシージャも使える sub Main3 Range("A1") = TestFnc(10) end sub Function TestFnc(a) TestFnc = a*10 End Function
今日の結論:意外と使えそう
今回は基本的なさわりだけでしたが、これから色々試してみます。結果が出たらまた報告します。
正直、ここまでサポートできているとは素直に驚きました。
■関連記事■
非IT企業に勤める中年サラリーマンのIT日記 1 UserVBA速度対決!Excel VS LibreOffice Calc以前、LibreOfficeでVBAが使えるということを紹介しました。 LibreOfficeでVBAが使えるという点はうれしいですが、果たして速度がどうなっているか気になるところです。そこで、ExccelとLibreOffice Calcとで同じコードを走らせてどちらが速いか確認しました。測定したコードはこちらSub Main() dt1 = CDbl(Timer()) result = 0 For i = 1 To 100000 result = result + i Next i dt2 = CDbl(Timer()) Range("A1") = result Range("A2") = dt2 - dt1End Sub 以下の通りそれぞれに同...[ad#ad-1]
スポンサーリンク