- ベストアンサー
エクセルのマクロでハイパーリンクを設定したのですが・・
エクセルのマクロでハイパーリンクを一括でやる方法を教えてください。 マクロは初心者なので、よくわかりません。 リンク先は同じドキュメント内の別シートです。 <一覧> A 1 name1 2 name2 3 name3 4 name4 5 name5 ・ ・ ・ name1のリンク先をSheet1 name2のリンク先をSheet2 name3のリンク先をSheet3 name4のリンク先をSheet4 という具合に順次、次のシートのリンクを張りたいと考えています。 目的として <一覧>のシートに記述されたタイトルをクリックすることで 同じタイトルのシートに飛べるようにしたいです 困るのは <一覧>のシートにも参照するシートの名前も記載済みなので 変わってほしくないことです。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
No4の補足への回答です。 「面倒くさい!!」やっぱりそうでしたね。 なぜA1が空白であれば動かないかと言いますと、 i=1 Do Until Cells(i, 1).Value = "" ↑[Do Loop]ステートメントと言うものを使っているから。 さらに[Until Cells(i, 1).Value = ""]というのは、 A列の1行目が空白なら「ハイパーリンクの貼付をやめますよ」と言うことです。 Cells(行番号,列番号)で場所を指定しています。 i は変数、初めは i=1 なので、1行目です。列番号は 1 なので、A列。 一番確実なのは、 Do Loop を使わず、For Next ステートメントを使います。 まず、A列に表示名で、B列にリンク先のシート名を入力しておきます。 B列に入力したシート名を参照する形になりますので確実です。 (B列に入力するシート名は正確に入力すること) なお、リンク後はB列に入力したシート名は削除しても大丈夫です。 ------------------------------------------------------------ Sub Test() Dim i As Integer For i = 1 To 50 '←50のところを最終行に設定し直してください。 If Cells(i, 1).Value <> "" Then With Cells(i, 1) .Hyperlinks.Add _ Anchor:=Cells(i, 1), _ Address:="", _ SubAddress:=Cells(i, 2).Value & "!A1", _ ScreenTip:=Cells(i, 2).Value & "を表示します", _ TextToDisplay:=.Value '↑「Cells(i, 2).Value 」の列番号「2」はB列ですので '実際に入力した列番号を入力し直してください。 End With End If Next i End Sub ------------------------------------------------------------
その他の回答 (6)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 基本的に、#1さんの考え方でよいのでは? ハイパーリンクに変換すると、後々、うっとうしいと思います。 私の場合は、以下のコードを応用して、ファイル名の一覧だけで、あちこちのフォルダの中のファイルを開けるようにまでしていますが、同じブックなら、以下のようになります。 取り付け方: シートを一つ使って、シート・タブを右クリック コードの表示 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim nm As String Dim ret As Variant Cancel = True ''A列だけに設定する場合 If Target.Column <> 1 Then Exit Sub 'A列以外は除外 If Target.Value = "" Then Exit Sub nm = Target.Value '※ ret = Evaluate(nm & "!A1") If Not IsError(ret) Then Application.Goto Worksheets(nm).Range("A1"), True End If End Sub A列に Sheet2 Sheet3 ・ ・ と書いて、その文字をダブルクリックをすれば、シート名が存在すれば飛んでいきます。 もし、 A列 B列 あ Sheet2 い Sheet3 う Sheet4 え Sheet5 というなら、 nm = Target.Value '※ ↓ nm = Target.Offset(,1).Value '※ 右となりのB列を参照という意味です。
- imogasi
- ベストアンサー率27% (4737/17069)
こういうのは、WEBで "HyperLinks.Add" で照会して、勉強のこと。 Googleで照会の場合は、.があるので””で囲むこと、および英字ばかりなので、「日本語のページを検索」を指定する。 >ドキュメント内 はワードに相応しい。ブック内が正しい。 ーー 関数でも出来そうな内容だ。 http://www.relief.jp/itnote/archives/000998.php VBAの勉強かも知れないが。
- Daiki_PaPa
- ベストアンサー率55% (11/20)
ど~も(^o^) ハイパーリンクを一つずつ設定するのが面倒くさく、 マクロを用いて一括でリンクしたいことなのでしょうか? それなら、以下を参考にしてください。 ------------------------------------------------------ Sub Test() Dim i As Integer i = 1 Do Until Cells(i, 1).Value = "" With Cells(i, 1) .Hyperlinks.Add _ Anchor:=Cells(i, 1), _ Address:="", _ SubAddress:="Sheet" & i & "!A1", _ ScreenTip:="Sheet" & i & "を表示します", _ TextToDisplay:=.Value End With i = i + 1 Loop End Sub ------------------------------------------------------ どうでしょう。 詳しい説明が必要なら、補足してください。
- mitarashi
- ベストアンサー率59% (574/965)
#1です。ピント外れだったら申し訳ありませんが、 下記の様なシートで、 .................A...............B ..1.......Title1......Sheet1 ..2......Title2.....Sheet2 ..3......Title3.....Sheet3 Titleのセルをクリックすると、隣のシート名のシートにジャンプします。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Intersect(Target, Range("$A$1:$A$10")) Is Nothing Then Exit Sub Sheets(Target.Offset(0, 1).Value).Select End Sub ご参考まで。
- mitarashi
- ベストアンサー率59% (574/965)
#1です。 投稿してから気がつきましたが、 シート名指定ではなくて、 別シートにタイトルを記してあるセルがあって、そのシートを検索してジャンプしたいという仕様なのでしょうか? >困るのは ><一覧>のシートにも参照するシートの名前も記載済みなので >変わってほしくないことです。 何が変わって欲しくないのか、分かりかねます。
補足
回答大変ありがとうございます。 別シートを検索してジャンプではなくて、シート指定です。 あくまでハイパーリンクを実装させたいのです。 ><一覧>のシートにも参照するシートの名前も記載済みなので >変わってほしくないことです。 >何が変わって欲しくないのか、分かりかねます。 名前のことです。 表示している文字は変えたくないという意味です。
- mitarashi
- ベストアンサー率59% (574/965)
ハイパーリンクより、SelectionChangeイベントでやったほうが簡単だと思います。選択したセルに入れてある名前に該当するシートにジャンプします。ご参考まで。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'イベントが有効になるセル範囲限定 If Intersect(Target, Range("$A$1:$A$10")) Is Nothing Then Exit Sub Sheets(Target.Value).Select 'ActiveSheet.Range("a1").Select End Sub <念のため、シートモジュールへの貼り付け方> ALT+F11でVBE画面に切り替え、たいてい左上にあるプロジェクト-VBA Projectというフレーム?で、Sheet1(例えば)をWクリックし、右側に表示されるメインの広いフレームに貼り付けて下さい。
補足
回答ありがとうございます。 >ハイパーリンクを一つずつ設定するのが面倒くさく、 >マクロを用いて一括でリンクしたいことなのでしょうか? YESです。 試してみると、希望していた動きでした。 ただ、A1に文字が入力されていないと動かないみたいですね? この辺の詳しい説明をお願い致します。 Do Until Cells(i, 1).Value = "" With Cells(i, 1) .Hyperlinks.Add _ Anchor:=Cells(i, 1), _ Address:="", _ SubAddress:="Sheet" & i & "!A1", _ ScreenTip:="Sheet" & i & "を表示します", _ TextToDisplay:=.Value End With