• ベストアンサー

エクセルのオートシェイプのテキストボックスにハイパーリンクの設定をする方法

テキストボックスに入力した文字をクリックするとその文字を含むセルにリンクするというマクロはできるのでしょうか?通常のハイパーリンクだと指定したセルに飛びますが、それだとちょっと困る事があるので「指定した文字を含む」という条件でマクロかなにかでできたら便利なんですが、なにかいい方法があれば教えてください。

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

  • ベストアンサー
回答No.4

> NM = ActiveSheet.Shapes.Range(Application.Caller).Name マクロを単独で実行されたようですね。 前回記述したマクロは、テキストボックスに登録して使います。 マクロを記述したら、テキストボックスの右クリックから "マクロの 登録"を選択して SearchByTxtbox を指定します。 その後、テキストボックスをクリックしますと、ボックス内に入力さ れている文字を含むセルを検索します。 続けてテキストボックスのクリックを繰り返すと、順次次のセルを検 索します。 テキストボックス内の文字列を書き換えてクリックすると、新しい文 字列の検索に入ります。 テキストボックス内の文字列は、30字までです。 とりあえず、テキストボックスは1つだけという前提で、複数のテキ ストボックスで交互に検索する場合は、このままでは使えません。

sreds
質問者

お礼

うまくできました!完璧です。ご指導ありがとうございました。

その他の回答 (4)

  • izmlz
  • ベストアンサー率55% (67/120)
回答No.5

 エラーになるとのことですが、テキストボックスのはじを右クリック-[マクロの登録]で、テキストボックス自体にマクロを登録されているでしょうか?もしかして、テキストボックスに文字列は入力されているけれども、コマンドボタンにマクロが登録されていることはないでしょうか?  もし、上記が該当しないのであれば、「オートシェイプのテキストボックス」とあるので、同じ「テキストボックス」だとは思うのですが、念のため。どのようにして作成した「テキストボックス」なのでしょうか?当方では、[図形描画]ツールバーの[テキストボックス]をクリックして作成しています。  それから、「テキストボックスにハイパーリンクの設定をする方法」とのことだったので、通常のハイパーリンクの運用と同様に、 (1)行き先は一箇所。 (2)異なる文字列が入力された複数のテキストボックスがある。 (3)ハイパーリンクがいちいちハイパーリンク先を変更することがないように、テキストボックスのテキストを変更することはない。 という前提で考えていました。  もし、一つのテキストボックスで対応、すなわちキーワードをしばしば変更するのであれば、テキストボックスを使用するのではなくて、「キーワード入力用のセル」+「コマンドボタン」の方が操作がだんぜん楽で良いんじゃないでしょうか?テキストボックスのクリックでマクロを実行するようになっていて、テキストボックスのテキストを変更するのは、右クリックして[テキストの変更]を選んでと面倒です。

sreds
質問者

お礼

質問がわかりづらくてすみません。テキストボックスの中にマクロは登録してます。テキストボックスも間違いなく同じものです。文章の一部にハイパーリンクの設定をしたかったので、、「キーワード入力用のセル」+「コマンドボタン」とはやりたことが違うかと思います。 せっかく教えていただいたのにうまくできず申し訳ありません。

回答No.3

> やってみましたが「指定したパラメーターに無効な値が含まれています」 こちらではエラーは発生しないのですが、 どの時点でエラーになりますか。 また、エラーメッセージが表示されるダイアログで[デバッグ]をクリックした場合、 モジュールのどの部分が反転していますか?

sreds
質問者

お礼

↓この部分でエラーが出ました。 NM = ActiveSheet.Shapes.Range(Application.Caller).Name ちなみにこれは文字をクリックして実行されるマクロですか? NMとsrchはすべて変えるのでしょうか?

回答No.2

ハイパーリンクにしてもマクロにしても、テキストボックス内の文字列を 変更するのに右クリックを使わなければならないので面倒ですね。 テキストボックスに、次のマクロを登録するのはいかがでしょうか。 Sub SearchByTxtbox()  Dim NM, srch, rng  NM = ActiveSheet.Shapes.Range(Application.Caller).Name  srch = Replace(ActiveSheet.Shapes(NM).TextFrame.Characters.Text, Chr(10), "")  If srch = "" Then Exit Sub  Select Case NM    Case Is <> srch    Set rng = ActiveSheet.Cells.Find(What:=srch, SearchDirection:=xlNext)    If rng Is Nothing Then     MsgBox "該当するセルがありません!"     Exit Sub    End If    Cells(rng.Row, rng.Column).Select    ActiveSheet.Shapes(NM).Name = srch   Case Else    Cells.FindNext(After:=ActiveCell).Activate  End Select End Sub NM:テキストボックスの名前、srch:テキストボックスに記述された検索文字列 マクロを登録したテキストボックスに記述された文字列をみて、 ・空白の場合   何もしないでマクロを終了します。 ・テキストボックス名と異なる場合   新たな検索文字列が指定された場合です。   文字列を検索してヒットしたら、テキストボックスの名前を、ボックス内に   記述された検索文字列と同じにします。 ・テキストボックス名と同じ場合   テキストボックスに記述されている検索文字列で「次」を検索します。

sreds
質問者

お礼

ご回答ありがとうございます。やってみましたが、「指定したパラメーターに無効な値が含まれています」とエラーが出てしまいました。 どうすればいいでしょうか?

  • izmlz
  • ベストアンサー率55% (67/120)
回答No.1

↓こんな感じでいかがでしょうか? Sub テキスト1_Click()  Dim myStr As String  Dim myRng As Range  myStr = ActiveSheet.Shapes(Application.Caller).TextFrame.Characters.Text  Set myRng = Cells.Find(myStr)  If myRng Is Nothing Then   MsgBox "「" & myStr & "」は入力されていません"  Else   myRng.Activate  End If  Set myRng = Nothing End Sub

参考URL:
http://www2.odn.ne.jp/excel/waza/macro.html
sreds
質問者

お礼

ご回答ありがとうございます。 「型が一致しません」というエラーが出ましたが、そのままマクロをペーストするだけではできないのでしょうか?