LibreOfficeは、無料で使うことが出来るオフィスソフトです。LibreOfficeを使用すると、MicrosoftのOfficeソフト(ExcelやWordなど)と同じようなことができます。「オフィスソフトを使いたいが、使用料は払いたくない」という人にとって、LibreOfficeは無料で使えるのが魅力です。この記事では、LibreOfficeでVBAを動かす例として、簡単なサンプルコードを紹介します。
まず、Calcを開きます。次に、メニューから、「ツール」 → 「マクロ」→「マクロの編集」と進みます。 この記事では、「無題4」という名前のファイルです(下図)。
ここで、「無題4」を選択したまま、「マクロの選択」(下図)をクリックします。
下図のダイアログが出ます。ここで、「新規作成」をクリックします。
モジュールの名前を選択するダイアログが出ます。ここでは、デフォルトのまま「Module1」とします。
すると、下図のように「無題4」に「Module1」が作成されました。
この記事では、上図の黄色くマーカーを塗った領域にコードを書きます。
どうやら、LibreOfficeではデフォルトではVBAが動作しないようです。VBAが動くようにするには、コードの冒頭に、次のコードを1行追加します。
表計算ソフトを使ってデータの集計をする場合、最終行の行番号を知りたいことがよくあります。たとえば、1行目から193行目までのすべてのセルに数字が書かれたデータがあるとします(下図)。
この表の、最終行の行番号である193という数字を取得する、VBAのコードを考えてみます。
#sample1で関数main
を実行すると、ポップアップウィンドウに「193」と表示されます。(main
にカーソルを合わせて、再生ボタンのマークのボタンを押すと、関数main
が実行されます。)
最終行の行番号である193が、正しく表示されました。
#sample1の変数LAST_ROW
は、最終行の行番号を保持するためのグローバル変数です。setLastRow
プロシージャの内容は、以下のとおりです。
r = 1
という記述で、最初の行番号を指定する。LAST_ROW
に格納する。たとえば、以下のような価格表を考えます。
この価格表のA列には、税抜き価格が書かれています。B列は税込み価格ですが、空欄になっています。この表のB列に、税込み価格を記入します。以下に、サンプルコードを示します。
[sample2]
このコードの関数main
を実行すると、#価格表のB列に税込み価格が入力されます(下図)。
#sample2の黄色い部分は、#sample1から書き換えた部分です。関数main
では、For文で、2行目から最終行(LAST_ROW)までループを実行しています。
For文の部分は、グローバル変数LAST_ROW
を使わずに、以下のように書くこともできます。
しかし、この書き方だと、最終行の行番号が6以外の場合に対応できません。そのため、#sample2のように、最終行の行番号を取得する処理は関数化しておき、行番号の変化に対応できるようにしておくと便利です。
「Excelを持っていないがVBAを使ってみたい」という場合には、LibreOfficeを使うといいかもしれません。LibreOfficeのCalcは、Excelと似たようなことができます。ただし、私は会社のPCではExcelを使っているため、CalcよりもExcelのほうが使い慣れています。私が自宅のPCでCalcを使っているのは、Microsoft Officeを持っていないからです。
表計算ソフトでデータを集計するとき、最終行の行番号を取得したいことがよくあります。そのため、最終行の行番号を取得する処理をプロシージャ(関数)にして、いつでも使えるようにしておくと便利です。