[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『■の目次を表示』(クララ)
教えてください。
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.