「Web出版サイト」ベータ公開

Q&A集[?]

当サイトでのご質問の受付は終了しました

すべてのコンテンツを読み込み専用としたため、回答欄からも投稿できません

Apache OpenOffice/LibreOfficeのご質問はそれぞれのフォーラムへご投稿ください

質問コーナー

サイト内検索

分類メニュー

関連サイト


本日:1
昨日:0
総数:2970
現在:4


ハイパーリンクのリストを作成したい

ページOpenOffice.org FAQの登録ページ
投稿者Orange
分類
edit/refer
優先順位
edit/refer
状態
edit/refer
カテゴリー
edit/refer
投稿日2010-04-20 21:06:15 (火)
OSXP
依存するページ
バージョン
edit/refer

メッセージ

回答ページでは行末に「~」を付加する必要はありません

入力規則でハイパーリンクのリストを作成したのですが、
リストに数式がそのまま表示されてしまうので、
とても分かりづらくなってしまいます。
そこで数式にラベルを付け、ラベルをリスト表示させるようなことは
可能でしょうか?

「データの入力規則」の「入力項目」

 =HYPERLINK("#Sheet3.A10";"link1")
 =HYPERLINK("#Sheet3.A20";"link2")
 =HYPERLINK("#Sheet3.A30";"link3")
 =HYPERLINK("#Sheet3.A40";"link4")

リストの表示は以下のようになってしまいます。

 =HYPERLINK("#Sheet3.A10";"link1")
 =HYPERLINK("#Sheet3.A20";"link2")
 =HYPERLINK("#Sheet3.A30";"link3")
 =HYPERLINK("#Sheet3.A40";"link4")

上記のリストの表示を、以下のようなリストの表示にすることは、
可能でしょうか?

 link1
 link2
 link3
 link4

入力規則でなくても、
以上のようなハイパーリンクのリストを作成する方法がありましたら、
お教えください。
よろしくお願いいたします。


ヘルプによれば

M.Kamataki (2010-04-21 10:32:47 (水))

HYPERLINK関数のヘルプには、「オプションの セルテキスト パラメータは、セルに表示され、関数の結果として返される、テキスト、または数値です。」と書かれています。

入力規則のリストに表示されることは想定していないようです。数式がセルに入力されると、「link1」などと表示されます。これはヘルプどおりに動作していますよね。

Excelの入力規則でも数式しかリストアップされません。セル用の関数なので仕方がないのではないでしょうか。

>入力規則でなくても、
>以上のようなハイパーリンクのリストを作成する方法がありましたら、
>お教えください。

ということで、こちらの方法を募集された方が良いと思います。なお、わたしは今のところ、ノーアイデアです。

苦肉の策

Orange (2010-04-21 12:52:48 (水))

「データの入力規則」の「入力項目」を以下のように変更

 link1,#Sheet1.a10
 link2,#Sheet1.a20
 link3,#Sheet1.a30
 link4,#Sheet1.a40


任意のセルにリスト選択を設定し、その右隣のセルに以下の数式を設定
(リスト選択用のセルが"C3"の場合、"D3"に以下の数式を設定)

 =HYPERLINK(RIGHT(C3;LEN(C3)-FIND(",";C3;1));"*")


これで、リスト選択したセルの右隣のセルの"*"をクリックすれば
目的の位置へジャンプできるようになりました。


理想的なハイパーリンクのリスト

Orange (2010-04-22 01:58:28 (木))

セルの変更イベントを登録することで解決する方法を見つけました。


処理の流れは、以下のような感じです。

リストを選択した時にセルの内容が変更され、セルの変更イベントが発生します。
イベントに登録していたマクロが呼ばれ、そのマクロによって選択されたリスト
の数式を変更したセルの数式に代入します。


設定内容:

C1〜C3にハイパーリンクの数式を設定

 =HYPERLINK("#Sheet2.A10";"link1")
 =HYPERLINK("#Sheet2.A20";"link2")
 =HYPERLINK("#Sheet2.A30";"link3")


C1〜C3のセルの表示内容は以下のようになる

 link1
 link2
 link3  


A1,A2に、「入力規則」のセル範囲"C1:C3"を設定

以下のマクロを、実行してA1,A2のセルの変更イベントに、
数式を代入するマクロを登録。

 Sub Main
   oDoc = ThisComponent
   oSheet = oDoc.getSheets().getByIndex(0)
   oCell1 = oSheet.getCellByPosition(0,0)
   oCell2 = oSheet.getCellByPosition(0,1)
   oModifyListener = CreateUnoListener( _
     "ModifyListener_", "com.sun.star.util.XModifyListener")
 
   oCell1.addModifyListener(oModifyListener)
   oCell2.addModifyListener(oModifyListener)
 End Sub
 
 Sub ModifyListener_modified( oEvent )
   oCell	= oEvent.Source.getCellByPosition(0, 0)
   sString	= oCell.getString()
 
   Dim oFuncService As Object
   Dim oRange As Object
   Dim vntRC As Variant
   oFuncService = CreateUnoService("com.sun.star.sheet.FunctionAccess")
   oRange = ThisComponent.Sheets(0).getCellRangeByName("C1:C3")
 
   vntRC = oFuncService.callFunction("MATCH", Array(sString, oRange, 0) )
   If IsEmpty(vntRC) Then
     MsgBox "NotFound"
   Else
     If oCell.Formula <> oRange.getCellByPosition(0,vntRC-1).getFormula() Then
       oCell.Formula = oRange.getCellByPosition(0,vntRC-1).getFormula()
     End If
   End If
 End Sub
 Sub ModifyListener_disposing( oEv )
 End Sub


以上です。
ありがとうございました。

お名前:
題名: