[[20151010133207]] 『■の目次を表示』(クララ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『■の目次を表示』(クララ)

教えてください。

sheet2 A列2行目から■タイトルその下に文章があります。
文章の行数は決まっていません。
■タイトルや文章は1か月に数回更新があって増えたり減ったり変わったりしています。

sheet1にsheet2の■タイトルの目次を作成したいのです。
sheet1のA1:A50に数式を入力してハイパーリンクでいいのかなとも思っているのですが、
行数がマチマチなので...よくわかりません。

例えばsheet1の■バナナをクリックするとsheet1の■バナナのセルにジャンプ
出来たらうれしいのですが、
実際はsheet2A列に■が40ほどあり■の後も長めのタイトルですが同じタイトルはありません。
目的の■を探すのに苦労しています。

sheet2 A列

■うさぎとリンゴ
おしえて
わかりません

■リンゴ
ありがとう
サヨナラ

■EXCEL
おしえて
ありがとう
サヨナラ
わかりません

■バナナ
おしえて
わかりません

■運動会にバナナってありですか?
はい
はい
はい

■うさぎの時間
ダメ
ありがとう
サヨナラ
わかりません
わかりません
■Word
うん

sheet1 A列
■うさぎとリンゴ
■リンゴ
■EXCEL
■バナナ
■運動会にバナナってありですか?
■うさぎの時間
■Word

< 使用 Excel:Excel2007、使用 OS:Windows7 >


 VBAのFindメソッドとシートのイベントでも行けると思いますが、最初からHYPERLINK関数を
 埋め込んでおく、ではだめですか?
(カリーニン) 2015/10/10(土) 14:04

 試してませんが、ワークシート関数だけでも行けそうですね。
(カリーニン) 2015/10/10(土) 14:05

 あまりよく検証してませんが、↓でいけるようです。

 B1セルに入力してある文字列と同じ文字列をシート2のA列から検索して
 ジャンプします。

 =HYPERLINK("#Sheet2!"&ADDRESS(MATCH(B1,Sheet2!A:A,0),1),B1)
(カリーニン) 2015/10/10(土) 14:13

 >例えばsheet1の■バナナをクリックするとsheet1の■バナナのセルにジャンプ

 よく見てませんでした。
 こういう条件ですと、マクロになると思います。

 あるいは、手動でハイパーリンクを埋め込んでおくとか。
 HYPERLINK関数ではなく、埋め込みのハイパーリンクです。

 ※↑HYPERLINK関数でもいけますね。14:17追記
(カリーニン) 2015/10/10(土) 14:16

 他セル参照ではなく、一つのセルで実現するには↓のようにします。

 =HYPERLINK("#Sheet2!"&ADDRESS(MATCH("■バナナ",Sheet2!A:A,0),1),"■バナナ")
(カリーニン) 2015/10/10(土) 14:20

 > sheet1のA1:A50に数式を入力してハイパーリンクでいいのかなとも思っているのですが、 
 > 行数がマチマチなので...よくわかりません。 

 sheet1のA1:A50に数式だけを入れて解決するのは、数式、関数の
 専門家からの回答をお待ちください。

 非専門家の私は、次のようにします。
 (1)Sheet2のA列から、「■で始まる文字列」によるオートフィルタで目次見出し行を抽出。
 (2)それをSheet1のA列にコピーペイスト
 (3)Sheet1のB1に以下を入力(カリーニンさんご指摘分)
    =HYPERLINK("#Sheet2!"&ADDRESS(MATCH(A1,Sheet2!A:A,0),1),A1)
 (4)必要な数だけ下にコピーペイスト
 (5)A列を非表示にしておきます。   
 何度も発生する処理なら、マクロにしておくと良いでしょう。

 なお、ヒットしたセルを画面の左上にセットするには、
 ハイパーリンクでジャンプしたときに発生するイベントプロシージャの中で、
 第二引数をTrueにした、Application.Gotoを利用します。

 ただし、HYPERLINK関数によるジャンプは、
 Worksheet_FollowHyperlinkイベントを引き起こさないので、
 HYPERLINK関数ではなく、セルに直接ハイパーリンクを設定する必要があります。
 つまり、そこもマクロで処理することになります。

(γ) 2015/10/10(土) 15:24


 まったく専門家ではありませんが、カリーニンさんの式を借りた強引な方法です。

 =IFERROR(HYPERLINK("#Sheet2!"&ADDRESS(MATCH(INDEX(Sheet2!A$2:A$1001,SMALL(IF(LEFT(Sheet2!A$2:A$1001)="■",ROW(A$1:A$1000)),ROW(A1))),Sheet2!A:A,0),1),INDEX(Sheet2!A$2:A$1001,SMALL(IF(LEFT(Sheet2!A$2:A$1001)="■",ROW(A$1:A$1000)),ROW(A1)))),"")

 Ctrl + Shift + Enter で確定
 下にフィルコピー

 この方法だと文字が青くなりません。でもセルにカーソルを持っていくと矢印に変わり
 該当のセルにジャンプします。
(se_9) 2015/10/10(土) 15:40

カリーニンさん ごめんなさい。あたし入力ミスしてます。
 >例えばsheet1の■バナナをクリックするとsheet1の■バナナのセルにジャンプ
正しくは 
 >例えばsheet1の■バナナをクリックするとsheet2の■バナナのセルにジャンプ です。

で、γさんの以下の件には惹かれます。が、マクロに関しては全くの素人で。

  >なお、ヒットしたセルを画面の左上にセットするには、
  >ハイパーリンクでジャンプしたときに発生するイベントプロシージャの中で、
  >第二引数をTrueにした、Application.Gotoを利用します。
 ...がんばってみよかなと。

カリーニンさん
γさん
se_9さん    ありがとうございました。関数で思っていたものが出来ました。

(クララ) 2015/10/10(土) 16:52


 レベルの低い私からは、相当に専門家でいらっしゃいます。

 Sheet2だけを使う全く別の方法です。
 遊びで作ってみました。

 Sheet2にオートフィルタを掛けたものを見出しにすればいいじゃない、
 という話です。

 下記のコードを、Sheet2のシートモジュールに貼り付けてみてください。

 (1)Sheet2の任意のセルでダブルクリックすると、
    オートフィルタが掛かって、■の項目だけが表示されます。
    (これが見出しのつもり)
 (2)その状態で、任意の見出しをダブルクリックすると、
    オートフィルタが解けて、その項目が画面左上に来ます。

 なお、一行目からデータがあるという前提です。

 ==== ここから ===============
 Dim flag_index_show As Boolean

 Sub test()
     Dim rng As Range

     Set rng = Range("$A$1:$A$" & Cells(Rows.Count, 1).End(xlUp).Row)
     If Me.AutoFilterMode Then
         rng.AutoFilter
         flag_index_show = False
     Else
         rng.AutoFilter Field:=1, Criteria1:="=■*", Operator:=xlAnd
         flag_index_show = True
     End If
 End Sub

 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
     Cancel = True

     Call test

     If flag_index_show = True Then
         Application.Goto [A1], True
     Else
         Application.Goto Target, True
     End If
 End Sub
 ==== ここまで ==============

(γ) 2015/10/10(土) 17:15


 マクロに関しては全くの素人で。 
 ということですので、シートモジュールと言われても、ということでしょうね。
 機会がありましたら、想い出してください。
 (自己満足版ということで)

(γ) 2015/10/10(土) 17:19


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.