老親介護に悩む30~60代の方へ
老親介護ねっと[老人ホーム編]
トップ 老人ホームの選び方 介護関連ニュース 新規オープンホーム情報 老人ホーム取材レポート お問い合わせ リンク集 Q&A

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

回答受付中の質問

エクセルのハイパーリンクのシート名の一括変更

お世話になります。
エクセル2010で、シート上部の7×5の35個のセルにその月の1から35日間のカレンダーを作りました。(左上のセルに日付を入れて「そのセル+1」をコピーして簡単にその月の1日から35日先まで日付を埋めました。

そのカレンダーの日付をクリックすると所定のセルにジャンプするように35回リンクを貼ったのですが、そのシートをコピーして12か月分のシート作るとリンクが最初のシートのカレンダーの当該日にジャンプしてしまうことに気付きました。

各シートのハイパーリンクのリンク先のシート名をせめて1シート毎に、リンク先のシート名を一括で変更できない者でしょうか?
35回X11枚のシートは気が遠くなりそうです。

投稿日時 - 2018-05-17 16:11:04

QNo.9499337

困ってます

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

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

回答(6)

ANo.6

同じシートの別のセルにリンクを作成していて、このシートをコピーしたら、コピーしたシートの同じセル位置にジャンプしたいなら以下のような手順になります。

ジャンプ先のセルを「数式」「名前の定義」で例えば「リンク1」のようにすべてのジャンプ先のセルの名前定義をしておきます。

このようにしてハイパーリンクの作成でセルごとに「定義された名前」にジャンプするように設定します。

このようにしたシートなら、このシートをコピーしてもシートごとにハイパーリンクを作成できます。

投稿日時 - 2018-05-20 10:57:20

ANo.5

#4です。
先の回答で、
D4の式=MOD(B3,7) としたのを
=MOD(B3-1,7)+1 に訂正します。
すみません。

投稿日時 - 2018-05-20 09:49:33

ANo.4

質問者がしたい仕掛けは、質問の標題では不適当ではないか、と思った。
そこで、私なりに想像して、下記をやってみた。時間はかかったが、質問者の意図と違う場合はすみません。無視してください。
出来れば、だまされたと思って、実際に下記をやってみてください。今後の参考ぐらいにはなると思う。
===
新規ブックを開き
Sheet1の名前を「月選択」にする。あとシートを月数分に増やしておく。
そのシートの第1行目の各列セルに、1月分2月分3月分・・12月までの、各文字列を入れる。
A2セル 「該当月クリック」の文字列を入れる。利用者へ指示用文言。
B2に式 HYPERLINK("#" & B1&"!"&CHOOSE($D$3,"A","B","C","D","E","F") & $C$3,B1)
と、入れて、横方向に第13列まで「式を複写」。本件のハイライト部分。
A3セルに 「日付指定B3に」を入れる。利用者へ指示用文言。
B3セルに「11」と日付数字(半角)を入れる。
C3に式 =INT((B3-1)/7)+3を入れる
D4に式 =MOD(B3,7)
各月シートでの、カレンダーの上の行と列番号を割り出すもの。
ーー
Sheet2,Sheet3,Sheet4・・のシートのタブにシート名を
1月分,2月分,3月分・・12月分とシート名を変更する。月数字は半角。
そして各月のシートのA3:G7に
1234567
891011121314
15161718192021
22232425262728
29303132333435
と数字を入れる。
そして残り月の各シートに、コピーして同様のデータになるようにする。
===
利用方法。
元Sheet1=「月指定」という名のシートのB3セルに日付数字(半角)を入れる。例11。C4,D4は各々4 と4に、セットした関数によって、なる。
第2列の望みの月に該当するセルを選択してクリックすると、今回は3月分の
セルをクリックすると
「3月分」シートの,11のセルを選択しているはず。
==
私ならVBAでやる。
エクセルの利用で、何か仕掛けを考える場合、関数しかできないのでは力不足と思う。
少なくともいVBAプログラムを作れるようにならないと、回答が複雑になったり(私の本件回答が1例)、最悪実現出来ないので、人の回答コードを丸写しして、意味が分からなくなったりする。
関数だけで、他人が利用に便利な仕組み(GUIなど)を作ろうとするのは、早すぎると、このコーナーの質問を読んで常々感じている。

投稿日時 - 2018-05-19 13:34:14

ANo.3

いちいちシートを分けるのを止めた方がいいと思いますけど。
Excelの使い方で失敗している人は大抵「○○別」でシートを分けて
しまいます。リンクを貼るのに苦労するなんて本末転倒です。

それは置いといて。

> 各シートのハイパーリンクのリンク先のシート名を
ハイパーリンクではなく HYPERLINK関数にして シート名のとこ
ろだけ別セルから参照するようにしたらどうですか?

投稿日時 - 2018-05-18 09:33:57

ANo.2

ハイパーリンクを作る時、右クリック→ハイパーリンクを使わず、ハイパーリンク関数で
=HYPERLINK("#C9","C9")
の様にすれば、シート名が入らないので、コピーしてもジャンプ先が、新しいシートになります。

既に作ってしまったなら、残念ながらハイパーリンクの一括変更の方法は無く、マクロを使うしかないようです。
'
Option Explicit
'
Sub MacroAll()
'
  Dim Sheet As Integer
'
  For Sheet = 2 To Sheets.Count
    Sheets(Sheet).Select
    Macro1
  Next Sheet
End Sub
'
Sub Macro1()
'
  Dim Hyperlink As Hyperlink
  Dim OldName As String
'
  OldName = Sheets(1).Name
'
  For Each Hyperlink In ActiveSheet.Hyperlinks
    Hyperlink.SubAddress = Replace(Hyperlink.SubAddress, OldName, "'" & ActiveSheet.Name & "'")
    Hyperlink.TextToDisplay = Replace(Hyperlink.TextToDisplay, OldName, ActiveSheet.Name)
  Next Hyperlink
End Sub

ジャンプ先が1番左のシートなら、新しいシートに置き換えます。
Macro1は今開いているシートに対して行います。
MacroAllは全てのシートに行います。Macro1を使っているのですべて入れて下さい。

投稿日時 - 2018-05-18 04:14:18

ANo.1

「置換」でできます。
セルにhyperlink が設定されていてもセルを選択しただけではlink 先はわかりませんが、「置換」で見えていな文字列を置換してくれます。

投稿日時 - 2018-05-17 20:38:37

補足

質問が悪かったようです。
リンクが貼ってあるセルの内容ではなく、リンク先に指定されているシート名を変更したいのですが。

さいしょにSheet1のA1セルに同じSheet1のZ1にリンクを貼ってそれをSheet2、Sheet3・・・・とコピーしたので、Sheet3のA1セルをクリックすると最初に設定したSheet1のZ1に飛んでしまうのです。

実際には「Sheet1」をこコピーすると「Sheet1(2)」「Sheet1(3)」・・・いうように「元のSheet名(数字)」でコピーが作成されるのですが、この時点でリンクは元のSheet名のままなので、元のSheetの指定セルに飛んでしまいます。

このリンク先の元のシート名を変更したいのです。
リンクを張ったSheetのコピーを作ることもあると思うので何か回避方法があるのでは?と思い質問させていただきました。

投稿日時 - 2018-05-17 23:21:29