LibreOffice CalcでVBAでシートとブックの操作する
LibreOffice Calcとは?
LibreOfficeは、The Document Foundationが支援する自由・オープンソースのオフィスソフトです。
ワープロ、表計算、プレゼンテーション、データベース、数式エディタの5つのアプリケーションで構成されています。
Microsoft Officeと互換性があります。
LibreOfficeの表計算ソフト…Excelに該当するのが、LibreOffice Calcです。
LibreOffice CalcはVBAで自動化でき、業務を効率化できる
ExcelというとVBAでプログラムをして自動化して業務を効率化することが出来ます。
では、LibreOffice Calcでプログラムをして自動化して業務を効率化する、どのように行えばいいのか?、分からないという方は多いのではないでしょうか?
LibreOffice Calcでプログラムをして自動化して業務を効率化する…その情報が非常に日本語で説明されているものが少なく、また見つけたとしても、これを覚えるのが大変だったりします。
しかし、それを解決する方法があります。
LibreOfficeでVBAを使うのです。
実はLibreOffice Calcは、VBAを使用することが出来ます。
VBAならたくさんの情報があります。
今回のブログ記事では、そのLibreOffice CalcでVBAでシートとブックの操作する方法について今回ご紹介します。
なお今回、Windowsを使用しましたが、Linuxでも使用できることを確認しました。
LibreOfficeを使われる方はLinuxユーザーが多いと思いますので、ぜひともLibreOfficeでVBAを使用していただきたいと思っています。
![](http://image.moshimo.com/af-img/2262/000000036328.png)
![](http://image.moshimo.com/af-img/1762/000000038398.png)
LibreOffice CalcでVBAでシートとブックの操作する方法
LibreOffice Calcのオブジェクトの階層
LibreOffice Calcのオブジェクトはこのように階層になっています。
Range(A1)は、セルA1を表しています。
Sheets(“Sheet1”).Range(A1)は、シート2のセルA1を表しています。
Workbooks(“Book1”).Sheets(“Sheet1”).Range(A1)は、Book1のSheet1のセルA1を表しています。
この構造を理解すれば、別のブックやシートのセルを指定することが出来ます。
Sheet2のセルA1を指定する場合は、LibreOffice CalcのVBAのコードでは以下のように記述します。
Sheets(“Sheet2”).Range(“A1”)
又は、Sheet2は左から2番めにあるので、こういう記述も出来ます。
Sheets(2).Range(“A1”)
LibreOffice CalcのVBAでシートを指定する具体例① Sheet2のセルA1に10と入力する
実際にLibreOffice CalcのVBAでSheet2のセルA1に10と入力してみます。
以下のコードを入力します。
![](https://nabesang.com/wp-content/uploads/2023/12/001-1.png)
Option VBASupport 1
REM ***** BASIC *****
Sub Select_sheet
Sheets("Sheet2").Range("A1").Value = 10
End Sub
Sheet1を選択した状態で、F5キーを押します。
すると以下のようにSheet2のセルA1に10が入力されます。
![](https://nabesang.com/wp-content/uploads/2023/12/002-1.png)
LibreOffice CalcのVBAでシートを指定する具体例② LibreOffice CalcのVBAで別のブックであるBook1のSheet1のセルA1に300と入力する
LibreOffice CalcのVBAで別のブックであるBook1のSheet1のセルA1に300と入力してみます。
以下のコードを入力します。
なおこの方法は、現在開いているブックのみ適用されます。
![](https://nabesang.com/wp-content/uploads/2023/12/003-1.png)
Option VBASupport 1
REM ***** BASIC *****
Sub another_book
Workbooks("Book1.ods").Sheets("Sheet1").Range("A1").Value = 300
End Sub
F5キーを押します。
すると以下のようにBook1のSheet1のセルA1に300が入力されます。
![](https://nabesang.com/wp-content/uploads/2023/12/004-1.png)
なお、もしRange(A1)とだけ記述して、シートもブックも指定していない場合はどうなるかというと、現在開いているブックのシートのセルA1というようになります。
LibreOffice CalcのVBAでシートを指定する具体例③ LibreOffice CalcのVBAでデータ抽出で使用した表を用いて、Calc(表計算)入門を抽出したデータを、Sheet2にコピーする
前回のブログ記事でデータ抽出で使用した表を用いて、Excel入門を抽出したデータを、Sheet2にコピーするということを行います。
![](https://nabesang.com/wp-content/uploads/2023/12/005-1.png)
以下のコードを入力します。
![](https://nabesang.com/wp-content/uploads/2023/12/006-1.png)
Option VBASupport 1
REM ***** BASIC *****
Sub Movingsheets
Dim saisyugyo As Long
saisyugyo = Cells(Rows.Count, 1).End(xlUp).row
Dim i As Long
For i = 2 To saisyugyo
Dim kurikaeshi As Long
kurikaeshi = Range("D" & i).Value * Range("E" & i).Value
Range("F" & i).Value = kurikaeshi
If Range("F" & i).Value < 3000 Then
Range("G" & i).Value = 500
Else
Range("G" & i).Value = 0
End If
Next i
Range("A1").AutoFilter 3, "Calc(表計算)入門"
Range("A1").CurrentRegion.Copy Sheets("Sheet2").Range("A1")
End Sub
最初に、Next iを改行し、前回のデータ抽出で学んだ方法でCalc(表計算)入門のみ抽出するコードの
Range("A1").AutoFilter 3, "Calc(表計算)入門"
を記述します。
そして改行します。
そして以下のコードを入力します。
Range(“A1”).CurrentRegion.Copy Sheets(“Sheet2”).Range(“A1”)
Range(“A1”).CurrentRegion.Copyの説明をします。
CurrentRegionですが、これはデータが入っている表全体を指定するものです。
その後にCopyメソッドを記述することで、Calc(表計算)入門のみ抽出した表をコピーします。
Sheets(“Sheet2”).Range(“A1”)の説明をします。
これは、コピー先は、Sheet2のA1という意味のコードです。
これでF5キーを押して実行します。
するとSheet1にCalc(表計算)入門のみ抽出したされます。
![](https://nabesang.com/wp-content/uploads/2023/12/007-1.png)
そして、Sheet2にCalc(表計算)入門のみ抽出したデータがコピーされます。
![](https://nabesang.com/wp-content/uploads/2023/12/008-1.png)
LibreOffice CalcのVBAでシート名を変更する方法
LibreOffice CalcのVBAでは、シート名を変更することが出来ます。
コードですが以下のように記述します。
Worksheets(“シート名を変更したいシート”).Name = “変更したいシートの名前”
“シート名を変更したいシート”ですが、例えばSheet1を変更したければ”Sheet1″と記述します。
“変更するシートの名前”、変更したいシート名にしたい名前、例えばSheet1の名前をシート1にしたければ、”シート1″と記述します。
具体例として、Sheet1を売上表、Sheet2をCalc(表計算)入門という名前に変更してみます。
コードは以下のようになります。
![](https://nabesang.com/wp-content/uploads/2023/12/009-1.png)
Sub change_name
Worksheets("Sheet1").Name = "売上表"
Worksheets("Sheet2").Name = "Calc(表計算)入門"
End Sub
以下のように、Sheet1が売上表、Sheet2がCalc(表計算)入門とシート名が変更されます。
![](https://nabesang.com/wp-content/uploads/2023/12/010-1.png)
![](http://image.moshimo.com/af-img/2262/000000036328.png)
![](http://image.moshimo.com/af-img/1762/000000038398.png)