We're currently migrating, read the details here

質問する
0

シートにあるセル範囲をユーザー関数を含んだ数式で名前定義するには?

質問日 2021-01-28 06:43:29 +0200

sunshellsaloha のGravatar画像

updated 2021-04-16 06:20:01 +0200

nogajun のGravatar画像
  • LibreOffice5 または 6 Basic (WINDOWS-10 バージョン 1909)

アクティブシート名を取得するユーザー関数を組み込んで シートにあるセル範囲を名前定義した時に そのデータをBASIC で取り込むには?

(問題例)

◆シート名 = 「経費2019」「経費2020」「経費2021」・・・
で各シートの X1:Z2に 2行3列のデータがある。

◆アクティブシート名を取得する関数

Function GetSheet() As String  
dim document as Object  
set document = iif(GetSolarVersion < 60000 ,StarDesktop.CurrentComponent, ThisComponent)  
dim oSheet as Object    
oSheet = document.CurrentController.Activesheet  
GetSheet = oSheet.Name    
End Function

◆名前定義の管理ウインドウ

(シート(S)―名前付きの範囲または式(N)―管理(M) で開き 「dttb」と定義した

dttb = GetSheet()&"."&$X$1:$Z$2

上記のように設定して以下のテストプログラム(VRTEST6)の シンングルステップ(F8キー)で進めた

Sub VRTEST6()

dim VR as object  
VR = ThisComponent.CurrentController.Activesheet  
W = VR.getCellByPosition(30,3)

a = "C_2"   
b = "G"

ReferredCells = ThisComponent.NamedRanges.getByName("dttb").getReferredCells()    ’・・・(A)  
tb = ReferredCells.DataArray

for j = 0 to ubound(tb)  
if tb(j)(0) = a then exit for  
next

boe = tb(j)(1)   
eoe = tb(j)(2)   
adrs = b + boe + ":" + b + eoe

W.SetFormula("=" & a)  
c = W.String & adrs  
End sub

セル範囲 X1:Z2 には 画像(上)=略のように定義されてます。 

ステップ(A)の次行まで進めた処で オブザーバーウインドウに「ReferredCells」と入力し 変数「ReferredCells」を確認すると、 値=Null, 種類=Variant/Object  としか,返ってきません。

比較として (A)行の「dttb」の代わりに 正しい名前定義である "dtb" (=$経費2020.$X$1:$Z$2)で定義すると ReferredCells.DataArrayには、画像(下)=記述 のような 階層のテーブルデータが返ります。

X1="HI-YO"   
Y1=596   
Z1=685   

X2="CREDIT"   
Y2=264   
Z2=457

X1,X2のデータはそれぞれ文字列です。

✖どこが、どのように間違いなのでしょうか?、

GetSheetルーチンか?
名前定義の仕方か? 直接の名前定義しか受容されてなく、間接指定はダメなのか? など

一応、任意セルに「=GetSheet()」 とすると シート名は 返ります

edit retag flag offensive close merge delete

Comments

1

直接の名前定義しか受容されてなく、間接指定はダメなのか?

himajin100000 のGravatar画像himajin100000 ( 2021-01-31 14:47:38 +0200 )edit

一つのブック(document)に同じ形式のシート(経費2019」「経費2020」「経費2021」・・・) で構成されており、そのX1:Z2に別documen(HI-YO=費用帳,CREDIT=クレジット管理)での 明細データの年毎の記録範開始,同終了位置を取り込むようになってます。 よって、ある年の経費シート(上記3種類以上ののどれか)をクリックしたときに dttbで定義されたユーザー定義関数を含む名前からX!:Z2のデータを読み取りたいのですが。

sunshellsaloha のGravatar画像sunshellsaloha ( 2021-02-01 01:16:14 +0200 )edit

1 Answer

1

回答日 2021-03-21 05:16:28 +0200

KWatanabe のGravatar画像

updated 2021-04-16 06:19:11 +0200

nogajun のGravatar画像

お尋ねになっている、ユーザー関数で取得したシート名を使って「範囲名で参照しているシート」を可変にする方法は見つかりませんでした。ので的確な回答になっていません。

単純なActiveシートのセル値参照・取得でしたら、以下のマクロをよく使っていますので参考にしてください。

配列に対応した範囲スタイルでの取得が難しいので、一度値を取得した後、配列にセットする方法も一考かと思いました。

Sub AsheetcellData

    Dim oSheet as Object
    Dim SheetName as String

    oSheet = ThisComponent.CurrentController.ActiveSheet
    SheetName = oSheet.Name

    Dim ataiX1 as String        '型を指定してください
    Dim ataiX2 as String
    Dim ataiY1 as String
    Dim ataiY2 as String

    oThisCompo = ThisComponent.Sheets.getByName(SheetName)
    ataiX1 = oThisCompo.getCellRangeByName("X1").string  '型を指定します 数値 value   式 formula
    ataiX2 = oThisCompo.getCellRangeByName("X2").string
    ataiY1 = oThisCompo.getCellRangeByName("Y1").value
    ataiY2 = oThisCompo.getCellRangeByName("Y2").formula

    MsgBox ataiX1
    MsgBox ataiX2
    MsgBox ataiY1
    MsgBox ataiY2

End sub
edit flag offensive delete link もっと

Comments

残念ながら、 求める意図、いささかズレてるように思います。私の意図は、 シートクリック、 名前定義dttbの内容が変化(ユーザー関数が担当) それから引き出されるセル範囲を取得 です。

いずれにしろ LibreOfficeマクロは難解ですね。 com.sun.star・・・の全体関係も理解できないし

投稿着手、ありがとうございました。

sunshellsaloha のGravatar画像sunshellsaloha ( 2021-03-22 02:23:59 +0200 )edit

質問ツール

2 followers

Stats

Asked: 2021-01-28 06:43:29 +0200

Seen: 149 times

Last updated: Apr 16