プロが教えるわが家の防犯対策術!

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

A 回答 (5件)

↓こんな感じでいかがでしょうか?



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
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/06/12 16:11

ハイパーリンクにしてもマクロにしても、テキストボックス内の文字列を


変更するのに右クリックを使わなければならないので面倒ですね。

テキストボックスに、次のマクロを登録するのはいかがでしょうか。

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:テキストボックスに記述された検索文字列

マクロを登録したテキストボックスに記述された文字列をみて、
・空白の場合
  何もしないでマクロを終了します。
・テキストボックス名と異なる場合
  新たな検索文字列が指定された場合です。
  文字列を検索してヒットしたら、テキストボックスの名前を、ボックス内に
  記述された検索文字列と同じにします。
・テキストボックス名と同じ場合
  テキストボックスに記述されている検索文字列で「次」を検索します。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/06/12 16:06

> やってみましたが「指定したパラメーターに無効な値が含まれています」



こちらではエラーは発生しないのですが、
どの時点でエラーになりますか。
また、エラーメッセージが表示されるダイアログで[デバッグ]をクリックした場合、
モジュールのどの部分が反転していますか?
    • good
    • 0
この回答へのお礼

↓この部分でエラーが出ました。
NM = ActiveSheet.Shapes.Range(Application.Caller).Name

ちなみにこれは文字をクリックして実行されるマクロですか?
NMとsrchはすべて変えるのでしょうか?

お礼日時:2008/06/12 18:41

> NM = ActiveSheet.Shapes.Range(Application.Caller).Name



マクロを単独で実行されたようですね。
前回記述したマクロは、テキストボックスに登録して使います。
マクロを記述したら、テキストボックスの右クリックから "マクロの
登録"を選択して SearchByTxtbox を指定します。

その後、テキストボックスをクリックしますと、ボックス内に入力さ
れている文字を含むセルを検索します。
続けてテキストボックスのクリックを繰り返すと、順次次のセルを検
索します。
テキストボックス内の文字列を書き換えてクリックすると、新しい文
字列の検索に入ります。

テキストボックス内の文字列は、30字までです。
とりあえず、テキストボックスは1つだけという前提で、複数のテキ
ストボックスで交互に検索する場合は、このままでは使えません。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/06/13 13:29

 エラーになるとのことですが、テキストボックスのはじを右クリック-[マクロの登録]で、テキストボックス自体にマクロを登録されているでしょうか?もしかして、テキストボックスに文字列は入力されているけれども、コマンドボタンにマクロが登録されていることはないでしょうか?



 もし、上記が該当しないのであれば、「オートシェイプのテキストボックス」とあるので、同じ「テキストボックス」だとは思うのですが、念のため。どのようにして作成した「テキストボックス」なのでしょうか?当方では、[図形描画]ツールバーの[テキストボックス]をクリックして作成しています。


 それから、「テキストボックスにハイパーリンクの設定をする方法」とのことだったので、通常のハイパーリンクの運用と同様に、

(1)行き先は一箇所。
(2)異なる文字列が入力された複数のテキストボックスがある。
(3)ハイパーリンクがいちいちハイパーリンク先を変更することがないように、テキストボックスのテキストを変更することはない。

という前提で考えていました。

 もし、一つのテキストボックスで対応、すなわちキーワードをしばしば変更するのであれば、テキストボックスを使用するのではなくて、「キーワード入力用のセル」+「コマンドボタン」の方が操作がだんぜん楽で良いんじゃないでしょうか?テキストボックスのクリックでマクロを実行するようになっていて、テキストボックスのテキストを変更するのは、右クリックして[テキストの変更]を選んでと面倒です。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/06/13 13:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!