- ベストアンサー
エクセル VBAとハイパーリンク
目次で1、2,3,4,5 とあり それぞれ非表示でシートを隠しています 目次の1を押すと非表示の1に飛び 非表示の1の中に目次に飛ぶボタンを作り 目次に戻ると1は非表示になる方法を教えてほしいのですが 宜しくお願いします
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
まず「目次」のシートの各セルに「1」~「5」の値を入力して、そのセルにハイパーリンクを挿入し「リンク先」を「自分自身」にします。 「自分自身にリンク」とは、つまり、A1セルにハイパーリンクを置いたら、リンク参照先を「目次!A1にする」のです。 この時、ハイパーリンクの「表示文字列」は「1」とか「2」とかになっている筈です。この「1」~「5」の値が、飛び先のシート名になります。 次に、目次シートの「イベントプロシージャ」に、以下のVBAコードを書きます。 Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink) If IsNumeric(Target.Range.Text) = True Then Sheets(Target.Range.Text).Visible = True Sheets(Target.Range.Text).Select Selection.Range("A1").Select Sheets("目次").Visible = False End If End Sub 次に「シート1」から「シート5」に「目次に戻る」というハイパーリンクを作ります。 これも「リンク先」を自分自身にしておきます。 次に、「1」~「5」の全シートの「イベントプロシージャ」に、以下のVBAコードを、それぞれ書きます。 Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink) If Target.Range.Text = "目次に戻る" Then Sheets("目次").Visible = True Sheets("目次").Select Sheets("目次").Cells(Val(Target.Range.Worksheet.Name), 1).Select Sheets(Target.Range.Worksheet.Name).Visible = False End If End Sub なお、上記のルーチンは「目次」シートの「1」~「5」のハイパーリンクが「A1」~「A5」に置いてある事を想定しています。 「A1~A5」と異なるセル位置にする場合は Sheets("目次").Cells(Val(Target.Range.Worksheet.Name), 1).Select の行を、ツジツマが合うように修正して下さい。 例えば「C1~C5」にするなら Sheets("目次").Cells(Val(Target.Range.Worksheet.Name), 3).Select にします。例えば「A3~A7」にするなら Sheets("目次").Cells(Val(Target.Range.Worksheet.Name) + 2, 1).Select にします。例えば「C3、C5、C7、C9、C11」にするなら Sheets("目次").Cells(Val(Target.Range.Worksheet.Name) * 2 + 1, 3).Select にします。
その他の回答 (4)
- chie65536(@chie65535)
- ベストアンサー率44% (8741/19839)
ANo.4です。 各シートの名前は「目次」「1」「2」「3」「4」「5」にしておいて下さい。 例示したVBAのコードは、ハイパーリンクされているセルに入って居る値を(「1」~「5」の値を)「そのまま、飛び先のシート名として指定している」ので、上記のような「シート名に制約がある」のです。 シート名を「個別の名前」にする場合は「1~5の値からシートの名前を求める」ようにして下さい。
お礼
わかりました
- kkkkkm
- ベストアンサー率66% (1719/2589)
No2の補足です。 それぞれのシート名は"で囲ってください。 Sheets("1のシート名")
お礼
ありがとうございます
- kkkkkm
- ベストアンサー率66% (1719/2589)
No1です。 あらためて件名を見るとハイパーリンクとなっているので、ハイパーリンクで飛ぶようにしてると仮定したら、目次のあるシートモジュールに (Caseの後ろの1,2,3,4,5は実際のセルに記載されているものを"で囲ったものに変更してください) Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink) Select Case Target.Range.Value Case "1" Sheets(1のシート名).Visible = True Sheets(1のシート名).Activate Case "2" Sheets(2のシート名).Visible = True Sheets(2のシート名).Activate Case "3" Sheets(3のシート名).Visible = True Sheets(3のシート名).Activate Case "4" Sheets(4のシート名).Visible = True Sheets(4のシート名).Activate Case "5" Sheets(5のシート名).Visible = True Sheets(5のシート名").Activate End Select End Sub それぞれのシートの目次に飛ぶボタンのマクロは全て以下のプロシージャ(同じもの)を指定 Sub ボタン1_Click() ActiveSheet.Visible = False Sheets(目次のあるシート名).Activate End Sub でいかがでしょうか。
- kkkkkm
- ベストアンサー率66% (1719/2589)
シートの表示は Sheets(シート名).Visible = True 非表示は Sheets(シート名).Visible = False で 表示したシートをアクティブにするには Sheets(シート名).Activate になります。 これを、組み合わせてそれぞれのボタンのプロシージャに追加してください。 目次の1を押す Sheets(目次1のシート名).Visible = True Sheets(目次1のシート名).Activate それぞれのシートの目次に飛ぶボタン Sheets(それぞれのシートの名).Visible = False Sheets(目次のあるシート名).Activate
お礼
ありがとうございます 試してみます
お礼
ありがとうございます 指定してできるのはありがたいです 試してみます