• ベストアンサー

Excel VBA シートへのリンク

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

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

  • ベストアンサー
  • eden3616
  • ベストアンサー率65% (267/405)
回答No.3

>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

その他の回答 (3)

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.4

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

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.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シートのことだが、その場合の対処を手抜きしている。 この私の想像で、でっち上げた、課題が的外れである可能性が大きいので、あえて手抜き。 別にエクセルの機能として、ワークシート関数の参照先を捉まえるしくみがあったかもしれない。 ハイパーリンクの利用のことかな?

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.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

shiroyukidaruma
質問者

補足

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

関連するQ&A

  • エクセルにおけるシート間のリンクについて

     いつもお世話になっております。  エクセル(Office2019)におけるシート間のリンクについて、お教えください。  下記のようなシートがあるとします。  10人しか入力していませんが、実際は500人ほどいます。 【シート名「購入者」】 A列      B列 1 氏名   住所 2 あああ アアア 3 いいい イイイ 4 ううう ウウウ 5 えええ エエエ 6 おおお オオオ 7 かかか カカカ 8 ききき キキキ 9 くくく ククク 10 けけけ ケケケ 11 こここ コココ  上記「購入者」シートの氏名と住所を領収書シートに入力してある領収書の枠(セル)にリンクさせたいと思います。  ただ、この領収書シートは200枚分が横にズラッと並んでいます。  実際の領収書の形を表示するのは難しいので、「購入者」シートの氏名と住所をどこのセルにリンクさせたいか文字で表記します。 【シート名「領収書」】 シート名「購入者」のA2セル(あああ) → シート名「領収書」のC4セルへリンク シート名「購入者」のB2セル(アアア) → シート名「領収書」のC5セルへリンク シート名「購入者」のA3セル(いいい) → シート名「領収書」のJ4セルへリンク シート名「購入者」のB3セル(イイイ) → シート名「領収書」のJ5セルへリンク シート名「購入者」のA4セル(ううう) → シート名「領収書」のQ4セルへリンク シート名「購入者」のB4セル(ウウウ) → シート名「領収書」のQ5セルへリンク シート名「購入者」のA5セル(えええ) → シート名「領収書」のX4セルへリンク シート名「購入者」のB5セル(エエエ) → シート名「領収書」のX5セルへリンク シート名「購入者」のA6セル(おおお) → シート名「領収書」のAE4セルへリンク シート名「購入者」のB6セル(オオオ) → シート名「領収書」のAE5セルへリンク シート名「購入者」のA7セル(かかか) → シート名「領収書」のAL4セルへリンク シート名「購入者」のB7セル(カカカ) → シート名「領収書」のAL5セルへリンク シート名「購入者」のA8セル(ききき) → シート名「領収書」のAS4セルへリンク シート名「購入者」のB8セル(キキキ) → シート名「領収書」のAS5セルへリンク シート名「購入者」のA9セル(くくく) → シート名「領収書」のAZ4セルへリンク シート名「購入者」のB9セル(ククク) → シート名「領収書」のAZ5セルへリンク シート名「購入者」のA10セル(けけけ) → シート名「領収書」のBG4セルへリンク シート名「購入者」のB10セル(ケケケ) → シート名「領収書」のBG5セルへリンク シート名「購入者」のA11セル(こここ) → シート名「領収書」のBN4セルへリンク シート名「購入者」のB11セル(コココ) → シート名「領収書」のBN5セルへリンク  一応、規則正しく7つ飛びずつ横にずれていく配置となっています。  インターネットでこのようなリンクがスムーズにできる関数等があるか調べましたが、思ったようなものは見つかりませんでした。  数がそれほど多くなければ一つ一つ手入力していくこともできますが、200枚もの領収書に手入力していくのは大変です。  上記のようなリンクがスムーズにいく方法をお教えくださいますよう、よろしくお願いいたします。

  • Excelのシートへのリンク

    Excelのブックにあるシート名をA列のセルに入れてあります。これをシートにリンクさせたいのですが、マクロで簡単にできませんか?現状は、1つ1つ、ハイパーリンクしています。

  • EXCEL セル値のシートにリンクを付ける

    同じブック内の別シートのセルにハイパーリンクを設置したいのですが、 シートの選択を、セルの値に設定する事は出来ないでしょうか。 シート1: A列:シート名       B列:各シートへのハイパーリンクを付けたいセル B1セルに、A1セルのシート名シートのA1セルへのリンク B2セルに、A2セルのシート名シートのA1セルへのリンク を付けたいのです。 シート名はたびたび変更をするため、 A列のシート名を変更すると、各シート名も変更になるように設定しています。 よろしくお願いいたします。

  • エクセルのVBAで質問です。

    こんにちは。 リストで選んだ商品名に該当する注意書きを別のシートに用意してあります。その範囲を名前を付けて定義しています。 例えばマクロを実行する「入力」シートのA1で「商品ABC」という商品名を 選んだ場合、「注意書き」シートに定義している名前「商品ABC」を探して、「書出し」シートのA13のセルに該当する商品の注意書きをコピーするというようにしたいのですが、名前の定義しているのをどのように探してそれをコピーするのかやり方がわかりません。 教えていただけないでしょうか。宜しくお願いします。

  • Excel で別シートのセル値を表示させる(初心者)

    Excel で一つ前のシートにあるセル値を表示させる。 例えば"Sheet1"と"Sheet2"が有るとして"Sheet2"のセル"A1"へ "Sheet1"のセル"A1"の値を表示させるには、=Sheet1!A1 と入力しますが、 この<Sheet1>の部分だけを別のセル "A2" で入力した値に変更したいです。 (気持ちとしては、A2!A1) どの様にすれば良いでしょうか? 常にシートをコピーして作成し、常に一つ前のシートの同位置セルの値を 表示させたいのが狙いで、シート名は数値に設定して "A2"へ MID(CELL("filename",$A$1),FIND("]",CELL("filename",$A$1))+1,31)-1 などを入れて方法があれば作成しようと考えています。 マクロも分かりません、関数など何か方法があればご教授お願いします。

  • エクセルのあるセルに■表示が出たら、違うシートに移動することがしたい

    私はマクロは全然分からないのでマクロを使わないで 出来るやり方を教えて欲しい 内容は、セルに入力規則のリストで■と□が選択出来るようにしました。 □から■を選択しセル内の表示が■に変わった時点で、ある該当シートに移動したいのですが、そんなこと出来るでしょうか教えて欲しい

  • エクセル別シートの参照方法について

    タイトルのあります通り エクセルにおいて別シートのデータを参照する際についての質問です 計算式(足し算のみ)の入っているsheet2のA1~C1を結合したセルデータを sheet1のD2~F2を結合したセルへ持ってきたいのですが ='sheet2'!A1:C1 とsheet1の該当セルへ入力しても「#VALUE!」と表示されてしまいます エクセル初心者のためどこが間違えているのかが分かりません ='sheet2'!A1:C1 というのは自分で入力したわけではなく sheet2の該当セルを選択しただけです 試しに新しいエクセルシートを二枚作り 同じ条件で入力してみるときちんと数値が反映されますが この場合sheet2の該当セルを選択するとsheet1には =sheet2!A1 という風に表示されます 自分ではこの違いしか見つけられません どなたか詳しい方教えていただけないでしょうか?? 初歩的な質問ですみません・・・ よろしくお願いいたします

  • EXCEL 一覧シートから各シートへ参照

    現在シートが 一覧、1、2、3、 とあります。 一覧シートには、 シート名(A1) 名前(B1) 1(A2) 山田(B2) 2(A3) 鈴木(B3) 3(A4) 木村(B4) と記載されております。(カッコ内は、セルの位置です) シート 1 のA1には、山田 シート1のB2を参照 シート 2 のA1には、鈴木 シート1のB3を参照 シート 3 のA1には、木村 シート1のB4を参照 とシート 一覧から参照して表示されるようにしたい と考えております。 数字の名前のシートが数個であればシート毎に入力すれば済む話ですが、 予定では、順次増え、最終的には100位になる予定です。 数式、マクロ VBA 等を使って  一覧シートに名前を入力すると該当のシートのA1セルに参照させる事は可能でしょうか? よろしくお願いいたします

  • エクセルでシートを追加するマクロについて

    マクロ初心者ですよろしくお願いします エクセルでシート1は名前などの入力用、シート2はフォーム用として作成しております シート1のA1から最大でA20(変動あり)に名前を入力すると名前の数だけシート2のコピーが追加され、シート名も入力した名前に変更する場合のマクロはどうすれば良いのでしょうか? またシート2のB1にも入力した名前を表示させたいです ご教授お願いいたします

  • エクセルのシートのリンクエラーについて

    エクセルのシートを使いシートAとシートBを作成し データをリンクしましたがエラーが 起こります。 シートAではデータの入力を シートBでは印刷をするように設定致しました。 ですが シートAの入力画面のセルのデータを切り取りして別のセルに貼り付けされてしまうとシートBの印刷用のセルにエラーが出てしまいます是を解決するには 数式を替えればよろしいのでしょうか ちなみにシートBのセルには次の式を使用中です =IF(シートA!A1="","",シートA!A1)  まとまりのない質問に成ってしまいましたが 宜しくお願い致します。

専門家に質問してみよう