非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

LibreOfficeでVBAを使う方法。1行おまじないを書くだけ!

      2017/09/26

前回は、LibreOfficeのMicroOfficeからの再現性が高くなって、図形はほぼ100%再現できたことを書きました。

 

ここで、「あとはVBAさえサポートできれば完璧だ」というようなことを書きましたが、なんとすでにVBAが使えるようになっていたことを知って驚いております。

さっそく試してみました。

広告

普通に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
 

 

今日の結論:意外と使えそう

今回は基本的なさわりだけでしたが、これから色々試してみます。結果が出たらまた報告します。

正直、ここまでサポートできているとは素直に驚きました。

 

■関連記事■

広告

 - LibreOffice/マクロ