こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Excel VBA シートへのリンク

セルA1表示されている名前と同じシート名(別シート)へリンクするマクロを
作成したいです。
A1セルには関数が入力されていて
他のセルで条件を選択すると該当するシート名と同じ名前が表示されるようになっています。
よろしくお願いします。

投稿日時 - 2015-09-15 13:19:56

QNo.9048062

すぐに回答ほしいです

質問者が選んだベストアンサー

>A1セルに表示されている名前と同じシートへ移動するようにしたいです。
>このシートにはドロップダウンリストなどがいくつかあり、
>組み合わせに応じてシート名が表示A1セルに表示されるようになっています。
>そこからのシート移動を教えていただきたいです。

移動するタイミングにより採用する方法が異なります。

今回の要件では上記により、複数のドロップダウンを選択することになりますので、
シートのセル内容が変化するタイミングでは実行できないものと判断致します。
(どのドロップダウンを選択した時点でA1のシート名が確定するか不明なため)

例えば、方法としては各ドロップダウンが選択されてA1の値が確定した後に、
ユーザーの手によって以下の二通りの方法があります。
(1)該当シートへリンクされた文字列をクリックして移動する方法
(2)該当シートへボタンをクリックして移動する方法


(1)HYPERLINK関数を使用した場合
A1セル以外のセルに『=HYPERLINK("#"&A1&"!A1","移動する")』この関数式を入れると、「移動する」と表示されたハイパーリンクが表示されます。
該当のリンクをクリックすると、A1に表示されているシートが表示され、A1セルにカーソルが移動します。

また、A1のセルに入力されている関数式を上記数式内の「&A1&」の箇所の「A1」の部分と置き換えた場合、A1にはシート名ではなく「移動する」という文字列が表示されて、クリックするとドロップダウンで動的に変化したシート名に移動することが出来ます。

(2)VBAコードを使用した場合
下記のSampleプロシージャを標準モジュールへ記述した上で、開発タブ(Excelオプションから表示可能)の挿入からフォームコントロールのボタンを挿入し、Sampleプロシージャをフォームコントロールのボタンに登録することでボタンをクリックすると該当のシートへ移動します。

Sub Sample()
Worksheets(ActiveSheet.Range("A1").Value).Activate
End Sub

投稿日時 - 2015-09-15 16:45:49

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

ごく初歩的な手順:
A1セルにシート名を選択できるように仕込んでおく(既に実現済)
B1セルに
=IF(A1="","",HYPERLINK("#"&A1&"!A1","移動"))
と記入して右詰の表示を設定しておく

A1セルを選択した後、B1セルの「移動」の文字をクリックする。

投稿日時 - 2015-09-16 00:48:40

ANo.2

質問者がやりたいことは、そんなにポピュラーな事項ではないと思うが、なぜこんなことをしたいのか、質問の真意をつかめない。
質問の説明の仕方が手順を追って説明してないからだと思う。
ーー
とりあえず、「はずれ」の可能性は大きいが書いてみる
たとえば、
Sheet1でA1に、式  =Sheet3!A3
Sheet1のA3に、式 =Sheet3!B4
とあるとする。
Sheet1のシートモジュールのSelectionChangeイベントで
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Selection.HasFormula = True Then
MsgBox "式あり" & Target.Formula
p = InStr(Target.Formula, "!")
MsgBox p
s = Mid(Target.Formula, 2, p - 2)
Sheets(s).Select
End If
End Sub
と入れておく。
Sheet1のA1やA3のように式が入っているセルをクリックすると
参照しているSheet名を割りだして、そのシートを選択する。
式で、Sheet3!の部分がなければ、Activeシートのことだが、その場合の対処を手抜きしている。
この私の想像で、でっち上げた、課題が的外れである可能性が大きいので、あえて手抜き。
別にエクセルの機能として、ワークシート関数の参照先を捉まえるしくみがあったかもしれない。
ハイパーリンクの利用のことかな?

投稿日時 - 2015-09-15 15:01:00

ANo.1

シートへリンクして何をしたいのでしょうか?

セルの内容をただ表示したいだけであれば関数だけで出来ますのでVBAで有る必要が有りません。

例えば、添付図のようなシート名リストからVLOOKUP関数でA1にシート名を表示(A1に『=VLOOKUP(B1,D3:E5,2)』の関数式が入っています)しているセル(A1)があるとして、Sheet2~4のA1の値をSheet1のA2に表示したい場合等は
A2に『=INDIRECT(A1&"!A1")』のような数式を入れることで対応できます。
INDIRECT関数は引数として指定した文字列をセル参照とする関数です。

通常、別のシート「Sheet2」のセルA1を参照する場合は「=Sheet2!A1」のように「=シート名!セル番地」の数式で参照することが出来るのですが、「A1&"!A1"」によりA1セルの文字列をシート名として文字列結合したものを引数としてINDIRECT関数でセル参照させています。

セルA1の数式で表示されたシート名を使用して何らかの処理が必要なのであれば、処理内容によってVBAで処理することになります。
VBAでシート名を指定する場合はオブジェクトを『Worksheets("シート名")』とします。
Sheet1のセルA1をオブジェクトとする場合は『Worksheets("Sheet1").Range("A1")』となります。
以下の例はVBAでSheet1のセルA1の値を対象のシート名として、対象シートのA1セルの値をSheet1のセルA3に出力しています。

Sub Sample()
Worksheets("Sheet1").Range("A3").Value = Worksheets(Worksheets("Sheet1").Range("A1").Value).Range("A1").Value
End Sub

投稿日時 - 2015-09-15 13:56:49

補足

みなさま、ありがとうございます。
知識がなくて、説明も不足していてごめんなさい。
A1セルに表示されている名前と同じシートへ移動するようにしたいです。
このシートにはドロップダウンリストなどがいくつかあり、組み合わせに応じてシート名が表示A1セルに表示されるようになっています。
そこからのシート移動を教えていただきたいです。

投稿日時 - 2015-09-15 15:54:14

あなたにオススメの質問