- ベストアンサー
HYPERLINKで指定セル内容で曖昧検索したい
エクセルのHYPERLINK関数で検索文字をB2セルにを入力した場合、B2セル+*のようにセル内容で曖昧検索出来ないのでしょうか? 例えばC列にABC123、ABC-123、ABC 123、・・・のどれかで入力されているような場合、検索セルにABCと入れると該当するセルにジャンプするようにしたいのですが。 現在フィルタを使用しているのですが使い勝手が悪く何とかできないかと。 VBAでの対応でも良いのですが当方永遠のVBA初心者なのでご了承くださいませ。 検索値が「該当なし」もあり得ますのでご配慮お願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
No3の追加です。 HYPERLINKでジャンプしたい場合は以下のようにもできます。 =IFERROR(HYPERLINK("#C"&MATCH(B2&"*",C:C,0),VLOOKUP(B2&"*",C:C,1,FALSE)),"なし")
その他の回答 (3)
- kkkkkm
- ベストアンサー率66% (1742/2617)
> 製品名なのでどれか1つでないと困るので入力時に正しい品名の行にジャンプ(入力させたい)のです。 「どれかで入力」を、ABCで始まるのが複数あると思ってました。どれかひとつなのですね。 たとえば適当なセルに =VLOOKUP(B2&"*",C:C,1,FALSE) でそのセルに該当する製品名が表示されますが、いかがでしょうか。 ただし、たとえばABC123がC1にありその後の行にABCD123があるとB2にABCでは上の行にあるABC123がヒットします。 多分HYPERLINK関数でジャンプしても同じところに到達すると思います。
補足
#No4までご丁寧な回答に感謝です。 なるほど、ABCD・・・は想定していませんでした。 が、改良品などは枝番のようにして出てくる可能性もありでした。 ただし、種々のオペミスの原因になるので基本は無いはずですし、実害が出る可能性は非常に低いと思います。 (少なくとも入力担当者の記憶と気配り頼りに比べたらはるかに良い) 申し訳ありませんが検証は明日になってしまいますので、結果報告は明日ということにさせていただきます。
- imogasi
- ベストアンサー率27% (4737/17070)
ジャンプであっても、「検索して」該当へ飛ぶ機能が要求されているので、HYPERLINK関数は適当でないのでは。 ーー WEBを検索するとFind関連の、たくさん記事がある。 検索語「VBA find ワイルドカード」など。 https://excelwork.info/excel/findwildcard/ を手直しして Sub test01() keyw = InputBox("検索語") keyw = "*" & keyw & "*" 'ワイルドカード Set myRng = Range("C1:C1000").Find(what:=keyw, LookAt:=xlWhole) If myRng Is Nothing Then MsgBox "見つからず" Exit Sub Else Set firstCell = myRng End If '--- Do St = St & myRng.Value & vbLf Set myRng = Range("C1:C1000").FindNext(myRng) If firstCell.Address = myRng.Address Then Exit Do Loop MsgBox St End Sub Find、FindNextは初心者に難しいと思うが、慣れの問題でしょう。 上記は複数該当があってもすべて列挙(表示)するだけ。 ワイルドカードの仕組みを使っている。 ーー しかし、質問には ・該当は複数ありえるのか(コンピュター処理では、なんでも複数あるかどうかは大切だ) ・個々の該当を発見しSelectをして何をしたいのか。 が質問に書いてない。ー>問題では? ーー あり場所をシート上で確認するだけなら Sub test01() ActiveSheet.Select keyw = InputBox("検索語") keyw = "*" & keyw & "*" Set myrng = Range("C1:C1000").Find(what:=keyw, LookAt:=xlWhole) If myrng Is Nothing Then MsgBox "見つからず" Exit Sub Else Set firstCell = myrng myrng.Select MsgBox "A" End If '--- Do St = St & myrng.Value & vbLf Set myrng = Range("C1:C1000").FindNext(myrng) If firstCell.Address = myrng.Address Then Exit Do myrng.Select MsgBox "Find" Loop 'MsgBox St End Sub
お礼
ご回答ありがとうございます。 当方には少々ハイレベルであること、関数でのご回答で解決できましたので本ご回答の検証は未実施です。 申し訳ありません。
- kkkkkm
- ベストアンサー率66% (1742/2617)
HYPERLINKでワイルドカードが使えるどうかは分かりませんが、もしできたとして「該当するセルにジャンプ」ですが複数あるどのセルにジャンプするのでしょうか・・・ エクセルの検索機能を利用すればいかがでしょう。
補足
いつもお世話になっております。 またまた、言葉足らずでした。 >・・・のどれかで入力されている・・・ 製品名なのでどれか1つでないと困るので入力時に正しい品名の行にジャンプ(入力させたい)のです。 放っておくと、人によってABC123とABC 123で入力されてしまうのでデータ集計時に上記の検定や気配りが必要となり、見落とす(間違いやすい表記が思いつかない)と不具合となります。現在は経験と気配りで対処しています。 また、表は新製品名が発生すると追記されます。 >検索値が「該当なし」もあり得ます・・・・(新製品の場合) 最初の入力は決まった担当者が申請書通りで入れることになっています。 尚、HYPERLINKで「文字列+*」ならワイルドカードが使えるところまでは調べたのですがセルをTEXT(指定セル)*ではだめでした。(と思います) 当方が思う以上に複雑(長い)コードになるならご回答の方法や、従来通りフルターで再検討してみることにします。
お礼
おはようございます。 朝一で確認しました。 全く想定通りの動作が確認出来ました! 今回も複数回のお手数をおかけしましたが一発解決でスッキリです。 IFERRORは知っていましたがあまり需要が無く?初めて採用の関数です。 昨日入力表を質問に合わせて全面改定して準備完了しているので、関係者に周知して早々に使用開始します。 朝一でスッキリして仕事に取り掛かれます。