Jump to content

Macros/Calc/ba019

From The Document Foundation Wiki
This page is a translated version of the page Macros/Calc/ba019 and the translation is 100% complete.


概要

このページでは、$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 です。
com.sun.star.sheet.NamedRangeFlag 定数グループ参照
名前 説明
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 コードが含まれています。