Visual Basic for Applications/シートからの読み書き
※ エクセルのシートの見方については、後半で付録として別記。本書では、すでにシートの読み方を知っていることを前提に説明を始める。
シートからの読み取り

では、まずマクロの練習用に、数値データを下記のように(マクロ側ではなく)excel・calc本体のシートに入れよう。
シートからの読み取り

次に、このシートを読み取りましょう。当然ですが、読めない問題を計算することは人間もコンピュータも不可能です。
シートからの読み取り

Microsoft Excel の場合、シートの読み取りのために、Cells(行番号, 列番号).Value を使います。ただしExcel では、左上のセルA1を、(1行目、1列目) だとして位置を数えることに注意してください。
シートからの読み取り

LibreOffice および OpenOffice の場合、シートの読み取りのために、下記コードのようにThisComponent.Sheets(シート番号).getCellByPosition(列番号, 行番号).Value を使います。Office の場合、左上A1セルを(0,0) としており、また (列,行) の順番です。(※ Microsoft Excel とは、関数名および位置の数え方が違います。)
シートからの読み取り

また、読み取った値を格納するために、変数を定義します。ここは Excel も LibreOffice なども基本的に同じです。どちらも
シートからの読み取り

で定義できます。整数の型(「整数型」という)を定義する必要がありますので、整数型を意味する Integer (なおインテジャーと読む)で下記のように定義します。
シートからの読み取り

新規ダイアログウィンドウに「
シートからの読み取り

」と表示される。
シートからの読み取り

それをOKすると、次に別の新規ウィンドウが現れ、「
シートからの読み取り

」と表示される。
シートからの読み取り

シート番号は、LibreOfficeを立ち上げた初期のままの状態では「0」です。
シートからの読み取り

(列番号, 行番号)という順序については、これは数学のx-y座標の (x, y) という並びと同じだと考えてください。
シートからの読み取り

「列」も x軸 も、横の並びです。
シートからの読み取り

「行」も y軸 も、縦の並びです。
シートからの読み取り

シート側では行は1を起点に数え始めますが、しかしLibreOfice マクロのコード側では0を起点に数え始めます。
シートからの読み取り

また、列「A」は、y座表の「0」に相当します。要するにLibreOffice では一番左上のシートは (0, 0) です。
シートからの読み取り

新規ダイアログウィンドウに「
シートからの読み取り

」と表示される。
シートからの読み取り

それをOKすると、次に別の新規ウィンドウが現れ、「
シートからの読み取り

」と表示される。
シートへの書き込み

x = Cells(1, 2).Value のようにCells 以下を右辺にすれば、それは読み取りです。
シートへの書き込み

一般的に、プログラミングにおいて イコール記号 = の意味は、「代入」(だいにゅう)という意味です。
シートへの書き込み

イコール記号「 = 」は、 「右辺の計算結果の値を、左辺に代入しろ」という意味です。
シートへの書き込み

「Value」とは「値」という意味の英単語です。
シートへの書き込み

「Cells(1, 2).Value」の意味は、「1行2列目のセル(B1) に格納されている値」という意味です。
シートへの書き込み

上記のような読み取り加算の処理をしたい場合、「Cells」 や「Value」の部分は、この名前でないと、いけません。
シートへの書き込み

ただし、小文字で「cells」や「value」と入力しても動作しますが、Excel VBA のエディタが自動的に「Cells」や「Value」の表記に修正します。
シートへの書き込み

シートからの読み込みでは、
シートへの書き込み

のようにThisComponentが右辺に来ました。
シートへの書き込み

シートへの書き込みは、単に
シートへの書き込み

のように、ThisComponentを左辺にするだけで可能です。
シートへの書き込み

これを実行して、ダイアログ「A3 (0, 2) の値は 8」が表示されたのを確認してOKした後、シート側を見に行ってください。
シートへの書き込み

A3の位置のセルに、加算の結果の数値「8」が書き込みされているはずです。
うまくいかない場合

エクセルなどは、入力値が数値データか文字列データかを区別する。読み取りの際、
うまくいかない場合

これから計算の読み書きに使いたいセルが文字列データとして判定されてしまっていると、マクロ操作の失敗の原因になる。
うまくいかない場合

文字列データに判定されたセルを数値データにするには、
その他

LibreOffice での読み書きのセル位置の指定の方法は、getCellByPosition 以外の方法もあります。
その他

たとえば getCellRangeByName( ) を使うと、セル名("A1"とか"A2"とかのこと)で読み書きの位置指定ができます。
その他

ByPosition ではなく RangeByName に変わっていることに注意してください。
その他

セル名と言っても、別にmyFavoriteCellとかの命名はできないので、誤解なきよう。
その他

変数の宣言では、下記のように、カンマ( , )で区切ることで、まとめて宣言することも可能です。
その他

Excel
その他

確認のため、B3のセル値「34」を消して空白にしておき(B1 = 14 と B2 = 20 はそのまま)、上記コードを実行してみましょう。
その他

LibreOffice
その他

確認のため、A3のセル値「8」を消して空白にしておき(A1 = 5 と A2 = 3 はそのまま)、上記コードを実行してみましょう。
その他

8がまたA3に書き込みされているはずです。
その他

さらに、
その他

と短くまとめる事も可能です。(結果の紹介は省略する。)
※付録: エクセルの復習

※ 知っていれば、下記は読む必要なし。
※付録: エクセルの復習

さて、表計算ソフト中のシートと、VBAのコードとの、データの読み書きを勉強しよう。これが出来ないとVBAを使い意味が無い。(もし単にWindowsでVisual Studioを使わずにプログラミングしたいだけなら、PowerShell という別の機能がある。)
※付録: エクセルの復習

ともかく、表計算ソフトとVBAによる読み書き話をする。
※付録: エクセルの復習

まず、エクセルの画面は一般に下記のように、行と列に番号がついている。
※付録: エクセルの復習

「行」とは、A,B,C、・・・ のように横の並びである。漢字の「行」の右上の部分が横2本の棒になっているので、関連付けて覚えよう。
※付録: エクセルの復習

「列」とは、1,2,3,・・・ のように、縦の並びである。漢字の列の右側が、縦2本の棒になっているので、関連づけて覚えよう。
※付録: エクセルの復習

エクセルの復習になるが、
※付録: エクセルの復習

のように、それぞれのセルの位置は、行と列の組み合わせで指定される。