セルと範囲

From Apache OpenOffice Wiki
Jump to: navigation, search
doc OOo
Book.png


セル個々の表計算ドキュメントを構成するのがセルという単位で、これらは 2 次元のリストで管理されます。つまり各セルは、左上隅を原点 (0,0) とする X と Y 座標で指定できます。

以下のサンプルコードは、左上隅のセルにアクセスして、文字列を挿入します。

Dim Doc As Object
Dim Sheet As Object
Dim Cell As Object   
 
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)
 
Cell = Sheet.getCellByPosition(0, 0)
Cell.String = "Test"

Template:Documentation/Note

セルの参照は、こうした数字による座標指定だけではなく、名前による指定も可能で、たとえば表計算ドキュメントの左上隅のセル (0,0) は、A1 セルとも呼ばれます。▼この場合のアルファベット A は列の位置を示し、数値 1 は行の位置を示します。▼このようなセル位置の参照方式を使い分ける際には、名前 (name) 方式の行指定は 1 から始まり、位置 (position) 方式の値は 0 から始まるので、両者を混同しないよう注意が必要です。

Apache OpenOffice のセルには、テキスト、数値、数式のいずれかを入力でき、何も入力されていないものを空白セルと呼びます。▼セルの種類は、セルに入力する内容で規定されるのではなく、これらを入力する際に使用するオブジェクト属性により決まります。つまり数値を入力するには Value 属性、テキストを入力するには String 属性、数式を入力するには Formula 属性をそれぞれ使用します。

Dim Doc As Object
Dim Sheet As Object
Dim Cell As Object   
 
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)
 
Cell = Sheet.getCellByPosition(0, 0)
Cell.Value = 100
 
Cell = Sheet.getCellByPosition(0, 1)
Cell.String = "Test"
 
Cell = Sheet.getCellByPosition(0, 2)
Cell.Formula = "=A1"

▼このサンプルコードでは、A1 から A3 のセルに、それぞれ数値、テキスト、数式を入力しています。

Template:Documentation/Note


                   仮に String 属性を用いて数値を入力した場合、Apache OpenOffice はこれをテキストとして扱います。▼たとえば、このような方法でセルに入力された数値は、右揃えではなく左揃えに\'95\'5c示されます。▼また数式を用いてテキストや数値を\'95\'5c示させた場合にも、同様の注意が必要です。
Dim Doc As Object
Dim Sheet As Object
Dim Cell As Object
 
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)
 
Cell = Sheet.getCellByPosition(0, 0)
Cell.Value = 100
 
Cell = Sheet.getCellByPosition(0, 1)
Cell.String = 1000
 
Cell = Sheet.getCellByPosition(0, 2)
Cell.Formula = "=A1+A2"
 
MsgBox Cell.Value

▼このサンプルコードを実行すると、A1 セルには 100、A2 セルには 1000 と\'95\'5c示されますが、A1+A2 という計算式の結果は 100 となります。▼こうなる原因は、A2 セルの値を数値ではなくテキストとして入力したためです。

セルの内容が数値であるか文字列であるかを確認するには、Type 属性を使用します。

Dim Doc As Object
Dim Sheet As Object
Dim Cell As Object
 
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)
Cell = Sheet.getCellByPosition(1,1)
 
Cell.Value = 1000
 
Select Case Cell.Type 
Case com.sun.star.table.CellContentType.EMPTY 
   MsgBox "Content: Empty"
Case com.sun.star.table.CellContentType.VALUE
   MsgBox "Content: Value"
Case com.sun.star.table.CellContentType.TEXT
   MsgBox "Content: Text"
Case com.sun.star.table.CellContentType.FORMULA
   MsgBox "Content: Formula"
End Select

Cell.Type 属性を使うと、セルの内容の種類を示す com.sun.star.table.CellContentType の値を取得できます。▼返される値は、以下のいずれかです。

EMPTY
値なし
VALUE
数値
TEXT
文字列
FORMULA
数式

▼セルの\'91\'7d入、削除、コピー、移動

<Check Alignment of PHs>▼ Calc には、セルの内容を直接編集する以外にも、セルの\'91\'7d入、削除、コピー、移動を行うためのインターフェースが用意されています。Apache OpenOfficeこのインターフェース (com.sun.star.sheet.XRangeMovement) は、表計算ドキュメントオブジェクトを通じて利用するもので、セルの内容を操作するために 4 種類のメソッドを提供しています。

insertCell メソッドは、セルを表計算ドキュメントに挿入する際に使用します。

Dim Doc As Object
Dim Sheet As Object
Dim CellRangeAddress As New com.sun.star.table.CellRangeAddress
 
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)
 
CellRangeAddress.Sheet = 0
CellRangeAddress.StartColumn = 1
CellRangeAddress.StartRow = 1
CellRangeAddress.EndColumn = 2
CellRangeAddress.EndRow = 2
 
Sheet.insertCells(CellRangeAddress, com.sun.star.sheet.CellInsertMode.DOWN)

▼このサンプルコードは、\'95\'5c計算ドキュメントの最初のシート (インデックス値 0) の第 2 列と第 2 行の位置 (インデックス値はともに 1) に、2 行 2 列分のセル範囲を\'91\'7d入します。▼また\'91\'7d入位置にある既存のセルは、その内容ごと下方に移動しています。

挿入するセル範囲を指定するには、com.sun.star.table.CellRangeAddress 構造体を使用します。▼この\'8d\'5c造体には、以下の値を設定できます。

Sheet (short)
シート番号 (開始値は 0)。
StartColumn (long)
セル範囲の先頭列 (開始値は 0)。
StartRow (long)
セル範囲の先頭行 (開始値は 0)。
EndColumn (long)
セル範囲の最終列 (開始値は 0)。
EndRow (long)
セル範囲の最終行 (開始値は 0)。

これらの設定の終了した CellRangeAddress 構造体は、insertCells メソッドの第 1 パラメータとして渡します。insertCells メソッドの第 2 パラメータには、セル範囲の挿入位置にある既存セルの処置を指定するため、com.sun.star.sheet.CellInsertMode の値を渡します。▼この CellInsertMode には、以下の値が用意されています。

NONE
挿入前の値を、その位置にとどめます。
DOWN
挿入位置にあるセルを、下に移動します。
RIGHT
挿入位置にあるセルを、右に移動します。
ROWS
挿入位置にある行全体を、下に移動します。
COLUMNS
挿入位置にある列全体を、右に移動します。

removeRange メソッドは、insertCells メソッドと逆の機能を担っています。▼このメ\'83\'5cッドは、CellRangeAddress \'8d\'5c造体で指定したセル範囲を、スプレッドシートから削除します。

Dim Doc As Object
Dim Sheet As Object
Dim CellRangeAddress As New com.sun.star.table.CellRangeAddress
 
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)
 
CellRangeAddress.Sheet = 0
CellRangeAddress.StartColumn = 1
CellRangeAddress.StartRow = 1
CellRangeAddress.EndColumn = 2
CellRangeAddress.EndRow = 2
 
Sheet.removeRange(CellRangeAddress, com.sun.star.sheet.CellDeleteMode.UP)

このサンプルコードでは、B2:C3 のセル範囲をシートから削除して、該当範囲の下方にあるセルを上に 2 行分移動させています。削除に伴い周囲のセルをどう処理するかは、以下の com.sun.star.sheet.CellDeleteMode の値により指定します。

NONE
削除前の値を、その位置にとどめます。
UP
該当範囲の下側にあるセルを上に移動します。
LEFT
該当範囲の右側にあるセルを左に移動します。
ROWS
該当範囲の下側にある行全体を、上に移動します。
COLUMNS
該当範囲の右側にある列全体を、左に移動します。

XRangeMovement インターフェースには、セル範囲の移動 (moveRange) およびコピー (copyRange) 処理用に、2 つの追加メソッドが用意されています。以下のサンプルコードでは、B2:C3 のセル範囲を、A6 の位置へ移動します。

Dim Doc As Object
Dim Sheet As Object
Dim CellRangeAddress As New com.sun.star.table.CellRangeAddress
Dim CellAddress As New com.sun.star.table.CellAddress
 
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)
 
CellRangeAddress.Sheet = 0
CellRangeAddress.StartColumn = 1
CellRangeAddress.StartRow = 1
CellRangeAddress.EndColumn = 2
CellRangeAddress.EndRow = 2
 
CellAddress.Sheet = 0
CellAddress.Column = 0
CellAddress.Row = 5
 
Sheet.moveRange(CellAddress, CellRangeAddress)

CellRangeAdress メソッドを使用する場合は、moveRange 構造体の指定以外にも、com.sun.star.table.CellAddress 構造体によるセル範囲の移動先も指定する必要があります。▼CellAddress には、以下の値を設定できます。

Sheet (short)
表計算ドキュメント番号 (開始値は 0)。
Column (long)
移動先の列位置 (開始値は 0)。
Row (long)
移動先の行位置 (開始値は 0)。

moveRange メソッドを使用した場合、移動先のセルの内容は常に上書きされます。▼InsertCells メ\'83\'5cッドの場合とは異なり、removeRange メ\'83\'5cッドには、移動先のセルを自動的に移動させるパラメータは用意されていません。

copyRange メソッドの使用法は moveRange メソッドと同様ですが、copyRange の場合はセル範囲の移動ではなくコピーを行うという相違点があります。

Template:Documentation/Note

Content on this page is licensed under the Public Documentation License (PDL).
Personal tools