Macros/Calc/ba019
Appearance
TDF LibreOffice Document Liberation Project Community Blogs Weblate Nextcloud Redmine Ask LibreOffice Donate
概要
このページでは、$Sheet1.$B$3:$D$6 を参照する新しい名前付き範囲を作成する LibreOffice Basic マクロを提供します。これは、7.0 Calc ガイドの第13章 ("Calc as a Database"(データベースとしてのCalc))から抜粋した例です。
説明
マクロでは、Calcドキュメントの NamedRanges サービスを使用して、名前付き範囲へのアクセス、作成および削除が行われます。このサービスには、多数のメソッドが関連付けられています。次のメソッドは、名前付き範囲の作成に特に役立ちます。
- getByName(名前)
- 指定された名前の範囲または式を返します。
- getElementNames()
- 現在のドキュメント内のすべての名前付き範囲の配列を返します。
- hasByName(名前)
- ブール値を返します。この名前の範囲が現在のドキュメント内にある場合はTRUE、それ以外の場合はFALSEです。
- addNewByName(Name, Content, Position, Type)
- 現在のドキュメントに新たに名前付き範囲を追加します。このメソッドには、次の4つの引数があります。
- Name – 新しい範囲の名前となる文字列
- Content – 名前を付ける範囲アドレスまたは数式の文字列
- Position – 相対セル参照のベースアドレス
- Type – 定義する名前付き範囲のタイプを指定するフラグの組合せ。次の表に、これらのフラグを示します。共通の名前付き範囲の場合、このパラメータのデフォルトは 0 です。
値 | 名前 | 説明 |
---|---|---|
1 | FILTER_CRITERIA | 範囲にフィルタ条件が含まれています。 |
2 | PRINT_AREA | 範囲は、印刷範囲として使用できます。 |
4 | COLUMN_HEADER | 範囲は、印刷用の列見出しとして使用できます。 |
8 | ROW_HEADER | 範囲は、印刷用の行見出しとして使用できます。 |
たとえば、次のコードでは、前述のメソッドを使用して、 MyNRange という名前の範囲が存在するかどうかを確認します。存在しない場合は、この名前の範囲が作成され、セル範囲 B3:D6 にアクセスするように設定されます。
Code
Sub AddNamedRange()
Dim oRange ' 作成される範囲
Dim oRanges ' すべての名前付き範囲の配列
Dim sName$ ' 作成する名前付き範囲の名前
Dim oCell ' Cellオブジェクト
Dim s$
sName$ = "MyNRange"
oRanges = ThisComponent.NamedRanges
If NOT oRanges.hasByName(sName$) Then
REM 相対セル参照のベースアドレスを設定します
Dim oCellAddress As new com.sun.star.table.CellAddress
oCellAddress.Sheet = 0 '最初のシート
oCellAddress.Column = 1 'B 列
oCellAddress.Row = 2 '3 行目
REM 最初の引数は範囲名です。
REM 2番目の引数は、数式を定義する文字列
REM または 式が使用されます。
REM 3番目の引数には、相対セル参照の
REM ベースアドレスを指定します。
REM 4番目の引数は、範囲の使用方法を定義するフラグのセットですが、
REM ほとんどの範囲では 0 を使用します。
REM 4番目の引数には、
REM NamedRangeFlag 定数の値を使用します。
s$ = "$Sheet1.$B$3:$D$6"
oRanges.addNewByName(sName$, s$, oCellAddress, 0)
End If
REM 作成された名前付き範囲を取得します。
oRange = ThisComponent.NamedRanges.getByName(sName$)
REM セル $Sheet1.$B$3 に含まれる文字列を出力します。
oCell = oRange.getReferredCells().getCellByPosition(0,0)
Print oCell.getString()
End Sub
この Calc ファイル には、上記のLibreOffice Basic コードが含まれています。