ハイパーリンクの作成方法と問題点

このQ&Aのポイント
  • エクセルのマクロを使って、同じブック内のシートにハイパーリンクを作成する方法を解説します。
  • マクロを使用して、全体のシートに各シートのタイトルが書かれたページを作成できます。
  • しかし、リンクをクリックしても「参照できません」というエラーが表示され、目的のシートに移動できない場合があります。
回答を見る
  • ベストアンサー

ハイパーリンクがうまくできません。

エクセルのマクロを使って、ハイパーリンクで同じブック内のシートに飛べるようなものをつくりたいと思っています。 まず、「全体」というシートに目次みたいに各シートのタイトルが書かれたページがあり、 そのタイトルがシート名になったものが大量にあります。 「全体」シートのタイトルをクリックするとそのシートに飛べるようにしたいのですがうまくいきません。 下のマクロはネットで探して使えると思ったものなのですが、 リンクをクリックしても「参照できません」とでて目的のシートに飛ぶことができません。 助言のほどよろしくお願いします。 Sub link123() Dim ws As Worksheet, r As Range With Worksheets("全体") For Each ws In Worksheets Set r = .Cells.Find(ws.Name, after:=.Range("A1"), LookAt:=xlWhole) If Not r Is Nothing Then .Hyperlinks.Add Anchor:=r, Address:="", SubAddress:=ws.Name & "!A1" End If Next ws End With End Sub

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

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.2

そのシートへのリンク設定を手作業で試してみてください。 シート名がシングルクォートで囲まれていませんか? シート名に!"#$%&'()=-|\スペース、その他記号文字がある場合はシングルクォートで囲む必要があります。 逆に、含んでいないシート名をシングルクォートで囲んでもエラーにはなりません。 全てシングルクォートで囲めば良いです。 .Hyperlinks.Add Anchor:=r, Address:="", SubAddress:="'" & ws.Name & "'!A1"

sho-ter
質問者

お礼

今回の質問にあった回答ありがとうございました。 私のシート名には"-"が入っていたためリンクができなかったと考えられます。 今回の問題は解決できました。 本当にありがとうございました。

その他の回答 (1)

  • mzon
  • ベストアンサー率48% (26/54)
回答No.1

?です。 そのままコピペして実行しましたができましたよ Excelのバージョンは2000です。 (ステップ実行してどこがだめなのか確認してみてはいかがですか?)

sho-ter
質問者

お礼

早速の回答ありがとうございます。 No2の方の回答にあるように、シート名に"-"が入っていたので実行できませんでした。 これから、もっと勉強して答える側になれるように頑張っていきたいと思います。 今回はありがとうございました。

関連するQ&A

  • EXCELでのリスト作成について

    このサイトでこのようなマクロを教えてもらいました。 そこでこれはシートの左側からリストシートに表示していくのですが、右側からリストにしていく方法はないでしょうか? よろしくお願いします。 ------------------------- Sub テスト() ActiveWindow.WindowState = xlNormal Dim i As Integer, r As Range With Worksheets("リスト") .Hyperlinks.Delete .Range("B4:B65536").ClearContents For i = 2 To Worksheets.Count Set r = .Cells(((i - 2) Mod 20) + 4, 2 + Int((i - 2) / 20)) r.Value = Worksheets(i).Name .Hyperlinks.Add Anchor:=r, Address:="", _ SubAddress:=Worksheets(i).Name & "!A1" Next i End With Columns("B:B").EntireColumn.AutoFit End Sub -------------------------

  • ファイルオープン時のマクロが一部実行されない

    いつも回答して頂き、ありがとうございます。感謝感謝です。 ファイルオープン時にApplication.Runで3つのマクロを実行させているのですが、最後のマクロだけ実行されません。どうしてでしょうか?もしかして、前の2つで『一覧シート』を除外するマクロを実行しているからでしょうか?御指導の程宜しくお願いいたします。 1番目に実行するマクロ Sub 特定のシート以外の最終履歴と次回予定日を算出する() Dim ws As Worksheet For Each ws In Worksheets If ws.Name <> "一覧" Then If ws.Name <> "メニュー" Then Dim c As Integer c = 3 Do While ws.Cells(2, c).Value <> "" With ws.Cells(6, c) .FormulaR1C1 = "=MAX(R8C:R10000C)" If .Value = 0 Then .Value = "履歴無し" ws.Cells(7, c).ClearContents Else .Value = .Value ws.Cells(7, c) = DateAdd("d", ws.Cells(5, c), DateAdd("m", ws.Cells(4, c), DateAdd("yyyy", ws.Cells(3, c), ws.Cells(6, c)))) End If End With c = c + 1 Loop End If End If Next End Sub 2番目に実行するマクロ Sub 期限の未達と到達を色で分ける() Dim ws As Worksheet For Each ws In Worksheets If ws.Name <> "一覧" Then If ws.Name <> "メニュー" Then Dim c As Long Dim res As Variant For c = 3 To ws.Cells(7, Columns.Count).End(xlToLeft).Column If IsDate(ws.Cells(7, c)) Then If ws.Cells(7, c) > Date Then res = 8 Else res = 3 End If Else res = xlNone End If ws.Cells(7, c).Interior.ColorIndex = res Next c End If End If Next End Sub 3番目に実行するマクロ Sub 各シートの情報を一覧へ転記する() Dim d As Integer Dim retu As Integer d = 3 Do While Cells(d, 2).Value <> "" With Worksheets(Worksheets("一覧").Cells(d, 2).Value) .Activate retu = .Range("IV7").End(xlToLeft).Column .Range(Cells(7, 3), Cells(7, retu)).Copy End With With Worksheets("一覧") .Activate Cells(d, 3).PasteSpecial Paste:=xlPasteAllExceptBorders, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False End With d = d + 1 Loop End Sub

  • 既存のマクロを他のエクセルファイルで使用したい

    下記のマクロを使おうと思うと、 このマクロがついたファイルを開いて 他のエクセルファイルを開くのですが使えません。 使おうとするとマクロのついたファイルに戻ってしまいます。 Sub test01() Dim ws As Worksheet For Each ws In Worksheets If ws.Name = "統合シート" Then Else ws.Activate d = ws.Range("A65535").End(xlUp).Row ws.Range(Cells(1, "A"), Cells(d, "C")).Copy Sheets("統合シート").Activate Sheets("統合シート").Range("A65535").End(xlUp).Offset(1, 0).Select ActiveSheet.Paste End If Next End Sub どこを変えればよいのでしょうか。 教えてください。 よろしくお願いします。

  • マクロが思うように動きません

    エクセル2007です。 初心者です。 マクロが思うように動きません。 指定のセルが空白の場合、msgboxを表示して、処理を抜ける 空白でない場合は、処理をつつける。 と言う事をしたいです。 with~の後が問題だと思うのですが・・ Sub 受注履歴書き込み() Dim ws01 As Worksheet, ws02 As Worksheet Dim r As Long, c As Integer, tmp As Long Set ws01 = Worksheets("受注書") Set ws02 = Worksheets("受注履歴") ws01.Activate With ws01 If .Range("C2").Value = "" _ And .Range("M2").Value = "" _ And .Range("M11").Value = "" _ And Worksheets("粗利報告書").Range("D3").Value = "" Then MsgBox "受注Noが空白です。処理を中止します。" Exit Sub ws02.Cells(r, 1).Value = .Range("C2").Value ' 受注No ws02.Cells(r, 9).Value = .Range("A40").Value ' 備考 ws02.Activate End If End With End Sub 採点願えますでしょうか? 宜しくお願い致します。

  • マクロを使ってハイパーリンクを作りたい

    エクセルで下記作業をマクロで行いたいのですが、 途中までつくれたのですが、うまくいきません (1)sheet2をコピーしてsheet2(2)を作る (2)sheet2(2)のsheet名を任意の名前(例222)にかえる (3)sheet1の任意のセルから新しく作った222へハイパーリンクを張る 下記のようなマクロを作りましたが ハイパーリンクを張るとことでうまく行きません どうすればよいのでしょうか。。。 助けてください sub 新しいシートの追加() 'dim sheet名 as string シート名 = InputBox("新しいシート名を入力してください", "シート名の指定") If シート名 <> "" Then Sheets("Sheet2").Select Sheets("Sheet2").Copy After:=Sheets("Sheet2") ActiveSheet.Name = シート名 Sheets("Sheet1").Select Range("A3").End(xlDown).Offset(1).Select ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _ シート名 TextToDisplay:=シート名 Selection.Hyperlinks(1).SubAddress = シート名 End If End Sub

  • 数行ごとの折り返しについて

    このようなマクロを作りました。 ------------------------------------------------ Dim i As Integer, r As Range With Worksheets("リスト") .Hyperlinks.Delete .Range("B4:B65536").ClearContents For i = 2 To Worksheets.Count Set r = .Cells(i + 2, 2) r.Value = Worksheets(i).Name .Hyperlinks.Add Anchor:=r, Address:="", _ SubAddress:=Worksheets(i).Name & "!A1" Next i End With ------------------------------------------------ これだけでは、B列に並んでしまうだけなのでこれを20データごと次の列に入力できるようにしたいのですがいろいろ調べたのですがわかりませんでした。 わかる方がいましたらよろしくお願いします。

  • マクロの処理速度向上

    教えてください。マクロ初心者です。以下のようなマクロを組みました。 Sub 処方箋一覧() Dim vbOK As Integer Set WS1 = Worksheets("sheet1") Set WS7 = Worksheets("sheet7") WS7.Select Range("b2").Select Selection.End(xlDown).Select ActiveCell.Offset(1, -1).Select ActiveCell.Offset(0, 1) = WS1.Range("B3") ActiveCell.Offset(0, 2) = WS1.Range("h3") ActiveCell.Offset(0, 3) = WS1.Range("q3") ActiveCell.Offset(0, 4) = WS1.Range("v3") ActiveCell.Offset(0, 5) = WS1.Range("y3")         ~中略~ ActiveCell.Offset(0, 167) = WS1.Range("w75") ActiveCell.Offset(0, 168) = WS1.Range("x75") vbOK = MsgBox("入力完了!!", vbOKOnly, "処理確認") If vbOK = 1 Then Worksheets("sheet1").Activate End If End Sub 合計で167のセルを違うシートに転記するマクロです。 動作するのですが、速度が非常に遅くて困っています。 処理速度を向上させるようなマクロの組み方を調べているのですが、わからず困っています。どなたか、教えていただけると助かります。 よろしくお願いいたします。

  • マクロ EXCELの範囲をコピーして貼付け2

    【やりたいこと】 エクセルファイル(test.xls)に複数のシートが存在します。 (1)そのエクセルに新しいシートを1つ挿入しシート名を「統合」とつけます。 (2)シート名に「時」という文字が含まれたシートにある表を範囲指定しコピー (3)「統合」シートに貼り付けます。 ※「時」という文字が含まれたシートは複数あります(不特定) 【問題箇所(エラーになっている箇所)・・★】 「時」という文字が含まれたシートは複数枚あるので「統合シート」に貼付ける際 前に貼り付けた続きから貼り付けたいので「統合」シートの最終行を求め、 貼り付けを行っていきたいのですが、最終行を求める箇所でエラーになります。 度々の質問で申し訳ございませんがどなたかご教示頂けないでしょうか。 よろしくお願い致します。 Sub attendanceJoin() Dim MaxRow As Integer Dim wsNewMaxRow As Integer Dim NewWorkSheet As Worksheet Dim ws As Worksheet Workbooks("test.xls").Activate Set NewWorkSheet = Worksheets.Add() '新しいシートを追加 NewWorkSheet.Name = "統合" '新しく追加したシートに「統合」と名前をつける Worksheets("統合").Range("A1").Value = "NO" 'A1のセルに「NO」と入れる For Each ws In Worksheets If ws.Name Like "*時*" Then MaxRow = Worksheets(ws.Name).Range("A4").End(xlDown).Row wsNewMaxRow = Worksheets("統合").Range("A1").End(xlDown).Row '↑★この行でエラー:最終行を求める箇所 With Workbooks("test.xls") .Worksheets(ws.Name).Range("A5:M" & MaxRow).Copy .Worksheets("統合").Range("A" & wsNewMaxRow + 1).PasteSpecial '求めた最終行の次から貼り付けする。 End With End If Next End Sub

  • エクセルのマクロを使ってデータ範囲が毎回異なるグラフを書きたいです

    あるシステムからデータをエクセルに落とすため、毎回、行や列の数が変わります。 テキスト本を見て下のようなマクロを作成しましたが、うまくいきません。どなたか教えていただけないでしょうか。 Sub グラフシート作成() Dim WS As Worksheet Dim Crt As Chart Range("A65536").End(xlUp).End(xlToRight).Activate Range("A1:" & Selection.Address).Select Set WS = Worksheets("Sheet1") Set Crt = Charts.Add With Crt .ChartType = xl3DBarStacked .SetSourceData Source:=WS.Range(ここに何を書けばいいのでしょうか?), PlotBy:=xlColumns .Name = "野菜栄養価表" End With Set WS = Nothing Set Crt = Nothing End Sub

  • エクセルのマクロについて教えていただきたいのですが・・・

    見積書を作成しているんですが、1枚目のシート(見積書)に明細が書ききれなかった時に、マクロを実行すると、『明細書』と言う名前のシートが(1)~(5)枚目まで追加され、各シートの小計を1枚目のシートに書き出す・・・と言うマクロを作りたいのですが、うまくいかずに困っています>< 追加されるシートの元となる『見積もりマスター』と言うシートがあって、そのシート内でそれぞれのシートの小計は取れるのですが・・・ 下記のマクロの中に何か追加すればうまくいく方法はありますか?? (明細書は追加する時もあれば追加しない時もあってその都度、使う人が、最大5枚まで何枚追加するかを決めるそうです。) Sub Macro1() Dim cnt As Integer Dim wkNum As Double Dim ws As Worksheet  For Each ws In Worksheets   If Left(ws.Name, 4) = "明細書(" Then    If IsNumeric(Mid(ws.Name, 5, 1)) Then     wkNum = Val(Mid(ws.Name, 5, 1))     If cnt < wkNum Then      cnt = wkNum     End If    End If   End If  Next ws  If cnt >= 5 Then   MsgBox ("明細書シートが既に5枚以上あるため追加できません")   Exit Sub  Else   Sheets("明細マスター").Copy after:=Sheets(Worksheets.Count)   ActiveSheet.Name = "明細書(" & cnt + 1 & ")"  End If End Sub マクロ自体をあまり理解できてなくて、会社の人や、ここで教えていただいて進めているので、出来ればそのままコピーして使用できるようにしていただけるとありがたいです。 よろしくお願いします。