LibreOffice Calc セルの読み取り・書き込みのマクロを作成しよう

アプリ

こんにちは
今回はCalcのセルの読み取り・書き込みのマクロを作成しようと思います。
簡単なので、是非最後までお付き合いください。

セルの位置の仕組み、XY座標として覚える

まず、セルの位置の仕組みを覚えましょう。

学生の時の数学の授業で、グラフを描くときに、横はX軸、縦はY軸としていたのを覚えてますよね。表の行と列も同じように、横はX軸、縦はY軸と覚えて下さい。

X=列、Y=行と覚える。(x, y) =(列、行)

セルのA1は(0,0)となります。B、C、と進むにつれて、B1⇒(1,0)、C1⇒(2,0)と左側の数字が増えていきます。そして、下方向では、A2⇒(0,1)、A3⇒(0,2)と右側の数字が増えていきます。

マクロを作成しよう

データを作成

まずはデータを準備します。”セル読み取り書き込み.ods”という名のファイルを作成しましょう。

そして、シート名を「データ1」、「データ2」とし、それぞれのA1のセルに「朝」、「夕」と入力しましょう。

マクロの準備

上部メニューで、「ツール」⇒「マクロ」⇒「マクロの管理」⇒「Basic」を選択して下さい。

Basicマクロのウインドウ(下の画像)が表示されます。開いているodsファイル(今回のファイル名は”セル読み取り書き込み.ods”)から「Standard」を選択し、「新規作成」をクリックして下さい。「新しいモジュール」のウインドウが開くので、「Module1」のままOKをクリックして下さい。これでプログラムを書き込める準備が出来ました。

セルを読み込みマクロ

Basicの画面では、下のように、「Sub Main」から「End Sub」まで空欄になっています。

この空欄にマクロを書いていきます。

まず、シート「データ1」のセル「A0」を読み取るマクロを作成します。

Sub Main

Dim oDoc As Object
Dim oSheet1 As Object
Dim datacell As String

oDOC = ThisComponent
oSheet1 = oDOC.Sheets.getByName("データ1")
datacell = oSheet1.getCellByPosition(0,0).String
Msgbox datacell
	
End Sub
3~5行目:変数の定義

最初の2行はオブジェクトを定義しています。

オブジェクトとは何かということになりますが、文字や数字以外の物と理解しておけばいいかと思います。

5行目は読み取ったセルを格納する文字変数の定義をしています。

7行目から9行目  ファイルのセルにアクセスする手順
oDOC = ThisComponent

これは”セル読み取り書き込み.ods”というファイルを「oDOC」という変数に格納しています。これで、プログラムがファイル本体にアクセスできる手段が出来ます

oSheet1 = oDOC.Sheets.getByName("データ1")

そして、先に定義したファイルの「データ1」というシート名を「oSheet1」に格納します。これで、データ1」というシートにアクセスする手段が出来ます

datacell = oSheet1.getCellByPosition(0,0).String

oSheet1.getCellByPosition(セルの位置).String」で、読み取るセルの位置を指定してデータを取得します。

先述した通り、A1は(0,0)になります。

A1のセルには文字列が入っているので、「String」と指定しますが、数字の場合、「value」になります。

'数字の場合
datacell = oSheet1.getCellByPosition(0,0).value

実行と読み取りの応用

Basicの画面で、三角の青マークをクリックするとマクロが実行されます。

実行すると、「朝」と表示されたメッセージボックスが表示されます。

「シート2」の「A0」のデータを読み取りたい時は、8行目のコードを「シート1」から「シート2」に変更すればいいだけです。

これで読み取りの方法はマスター出来ました。

セルに書き込むマクロ

読み込みマクロが出来れば、書き込みも簡単です。

下記のコードはシート”データ1″のA1のセルを、シート”データ2″のB2セルに書き込んでいます。

Sub Main

Dim oDoc As Object
Dim oSheet1 As Object
Dim oSheet2 As Object

oDOC = ThisComponent
oSheet1 = oDOC.Sheets.getByName("データ1")
oSheet2 = oDOC.Sheets.getByName("データ2")

oSheet2.getCellByPosition(1,1).String = oSheet1.getCellByPosition(0,0).String

End Sub
8,9行目 シートの定義

注意していただきたいのは、シート毎にオブジェクトを定義して下さい。

11行目

セルにそのまま代入すれば、セルに書き込みがされます。

実行

実行すると、シート”データ2″のB2のセルに、シート”データ1″のA1のセル「朝」が書き込まれたのがわかります。

まとめ

いかがだったでしょうか。

マクロでセルの読み書きの基本をマスターすることが出来ました。

今回は1つのセルの読み書きでしたが、別のシートのセルの読み書きもわかったので、色々と応用できると思います。

データ数が多いほど、マクロの魅力が増してきますので、是非、みなさんも試してください。

役に立った!」と思れましたら、下のSNSボタンで記事のシェアをしていただけると嬉しいです!

[マークライデン] バックパック 防水ビジネスリュック メンズ用 30L大容量 盗難防止ラップトップバッグ17インチパソコン対応 黒
MARK RYDEN(マークライデン)
表面素材は傷などがつきにくい高密度の防水生地を使用していますので、耐摩耗性・耐久性を実現しました。軽い雨や水などをこぼしても問題ない。YKKジッパーを使用する、ファスナー周囲の縫製が加固処理して、元よりもっと丈夫です。

コメント

タイトルとURLをコピーしました