- ベストアンサー
複数行列のセル範囲から検索する方法
Excel2003を使っています。 A1:Z80のセル範囲から指定した値を検索し、その値の番地を取得する方法を教えてほしいです。 重複する値は入力されていませんが、空白セルもあります。 他のシートの任意のセルに検索したい値を入力し、見つけた番地にたいするリンクを設定したいのです。 VBAでも関数でもいいので、力を貸して下さい。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
●マクロの記録をとり(この場合検索操作)基礎的なことは勉強せよ マクロの記録に言及して無いが、 新しいマクロの記録モードで、検索の操作をして、でてきたコードをじっくり考えること。そんなこともせず(従って焦点が絞れてない)、全部解答を書いてくださいという、コーナーではないはず。 ●WEB照会をせよ。 VBAの本でも必ず記述があり、WEBでも「Find メソッド」で照会すれば沢山の記事がある。 まず http://officetanaka.net/excel/vba/cell/cell11.htm ほか多数。
その他の回答 (1)
- higekuman
- ベストアンサー率19% (195/979)
回答No.1
Find と Address を調べてみましょう。
質問者
お礼
Findを調べたところほとんど解決しました。 ありがとうございます。
お礼
大変失礼しました。 親切な回答者の方々に甘えすぎていたと反省しています。 Findを使うというヒントをもらえたことで、ほとんど解決しました。 ところが、コードを実行して、理解できない事が起こったので捕捉の部分に載せてみます。 もしよかったらまた相談に乗ってほしいです。
補足
自家育成、データ、居場所。 この三つのシートのセルをHyperlinkとGotoで移動しています。 "自家育成""居場所"間の移動だけならデータシートは必要ないのですが、 "自家育成"シートはコピーして増えていくので、"居場所"から"自家育成"シートにリンクさせる時の番地指定が難しいと感じました。 そのためリンクさせたい全ての値の情報が入っている"データ"シートと"自家育成"の間にあらかじめリンクを設定しておくことで、"居場所"から"データ"にとび、Followを使ってさらに"自家育成"に戻れるようにしました。 "自家育成"に値を入力した時、"データ"から"自家育成"に戻るリンクを設置していますが、"居場所"に値を入力する前に"自家育成"からダブルクリックで"居場所"のセルに移動しようとすると、 "データ"で設置されていたHyperlinkの移動先が変わっているのです。 "自家育成"のセルに移動するはずだったのが、"データ"シート内の"自家育成"シートで記入した番地に移動する設定に変わります。 "自家育成"でC1に入力した時は、***xls'自家育成'!$C$1だったリンクの移動先が、、***xls'データ'!$C$1になります。 "居場所"に目的の値が入力されているときはこの不具合は起こらないのですが。 1つのシートに複数のイベントが書かれています。 今回のコードは二つですが、両方ともC列に入力したりダブルクリックしたりしています。それが原因でしょうか? Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column <> 3 Then Exit Sub 'C列以外の変更なら処理を終了 If Target.Count > 1 Then Exit Sub 'セルを二つ以上選択した場合 If Target.Value = "" Then Exit Sub 'データの空の場合 Dim z, kennsaku, x x = ActiveSheet.name Set z = Worksheets("データ").Range("$B$1:$B$65536") kennsaku = Application.Match(Target.Value, z, 0) If IsNumeric(kennsaku) Then Worksheets("データ").Hyperlinks.Add Anchor:=Worksheets("データ").Range(Cells(kennsaku, 2).Address), Address:="", SubAddress:="'" & x & "'!" & Target.Address & "" End If End Sub Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim banngoukennsaku Set banngoukennsaku = Worksheets("居場所").Range("A1:Z80").Find(what:=Target, lookat:=xlWhole) If banngoukennsaku Is Nothing Then MsgBox "「居場所」には記載されていません。" Exit Sub Else Application.Goto reference:=Worksheets("居場所").Range(banngoukennsaku.Address) End If End Sub