目次
無料で使える表計算ソフト LibreOffice Calc の Basic でセルを扱う方法を説明します。 Excel VBA だと Cell(1, 2)
のように扱えますね。
環境
試した環境は次のとおりです。
- LibreOffice 5.1.4.2
- OS: Ubuntu 16.04.1 LTS
基本
セル A1 の内容を書き換えてみます。
1 2 3 4 5 6 7 8 9 10 11 |
Sub Main Dim document As Object Dim sheet As Object document = ThisComponent sheet = document.Sheets(0) Dim cell As Object cell = sheet.getCellByPosition(0, 0) cell.Formula = "12345" End Sub |
セルは シート の getCellByPosition
メソッド で取得します。 そして気をつけるべきは、 Excel VBA と違って 行と列のインデックスが 0 から始まることです。 インデックスの順番も Excel VBA と異なり 列、行 の順番です。
値の代入
セルに値を代入するときには、 Value
, String
, Formula
を使い分ける必要があります。 たいていは Formula
だけを使っていれば大丈夫です。
- Value
- 数値を代入するときに用いる。 数値でない値を代入すると、 スプレッドシートでは
0
になる。 -
12cell.Value = "123" ' => 123cell.Value = "abc" ' => 0
- String
- 文字列を代入するときに用いる。 仮に数値を代入したとしても、 スプレッドシートでは左寄せの文字列になる。
-
12cell.String = "abc" ' => abc (String)cell.String = 2 ' => 2 (String)
- Formula
- 数式を代入するときに用いる。 文字列や数値を代入する場合は、文字列は文字列として、数値は数値として取り扱ってくれる。
-
123cell.Formula = "=A2+A3" ' => A2 + A3 (Formula)cell.Formula = 123 ' => 123 (Number)cell.Formula = "abc" ' => abc (String)
値の読み取り
上と同じように Value
, String
, Formula
を使い分けます。 しかし、普通はセルにどのタイプの値が入っているか(数値なのか文字列なのか)は予めわかっていることが多いので、難しいことはないと思います。
- Value
- 数値の値に対して使用します。 数値でない(文字列形式の)値がセルに入っている場合、
Value
によって取得できる値は 0 です。 - String
- 文字列の値に対して使用します。 文字列でない値(数値)がセルに入っていたとしても、 文字列として値が取得できます。
- Formula
- 数式を取得します。 単純に数値や文字列が入っている場合、うまく扱えば数値にも文字列にもなります。 基本的に文字列と考えて扱うのがいいと思います。
-
123456789101112cell.Value = 2Dim s As Strings = cell.FormulaMsgBox s + 5 ' => 25Dim n As Integern = cell.FormulaMsgBox n + 5 ' => 7cell.Formula = "=A2+A3"MsgBox cell.Formula ' => =A2+A3
計算例
下のように 国語と算数の点数が表になっているとします。 ここで、国語・算数の点数の平均を求めます。 一般的にはこういう場合、式を使って平均を計算します。 ここでは Basic の例としてコードを使います。
A | B | C | D | |
---|---|---|---|---|
1 | 名前 | 算数 | 国語 | 平均 |
2 | 飯田 真一 | 44 | 75 | |
3 | 米田 珈琲 | 73 | 59 | |
4 | 江川 ひさし | 85 | 29 | |
5 | 青山 一郎 | 12 | 30 | |
6 | 三浦 誠 | 55 | 78 | |
7 | 加藤 和男 | 97 | 42 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Sub Main Dim document As Object Dim sheet As Object document = ThisComponent sheet = document.Sheets(0) Dim rowIndex As Integer For rowIndex = 0 To 10 Dim arithmatic As Double, language As Double arithmatic = sheet.getCellByPosition(1, rowindex).value language = sheet.getCellByPosition(2, rowIndex).value sheet.getCellByPosition(3, rowIndex).value = (arithmatic + language) / 2 Next rowIndex End Sub |