
エクセルシートの上部に入力欄と検索ボタン、リセットボタンを設置して、
同じシート内の一覧からヒットする場所に飛ぶようにしたいです。
ctri+Fの検索を常時表示しておくイメージです。
初心者なりにマクロを試行錯誤で試してみましたが、
どうもうまく機能しません。
どなたかご教授いただけませんでしょうか。
希望は以下のとおりです。
・検索ボックスと一覧は同じシート
(ボックスではなくセルに入力でも可)
・部分一致
・検索結果が複数ある場合は次の候補へ飛ぶようにしたい
・データがあるのはC40〜C400のセル
どうぞよろしくお願いいたします。
No.6ベストアンサー
- 回答日時:
#5です
>コマンドボタンを押すのが
ショートカットキーを登録するとかもありますよ
簡単な方法、マクロの記録でショートカットキーを決め記録終了、そのプロシージャにコードを書けば良いはず。
通常、VBAで検索するコードを書く場合、その後の処理まで書くのが普通かな?ただ選択するだけでは、わざわざ、、と言う感じですね。
もしすべてを選択するのであれば、FindNextでセルをunionメソッドで合体させSelectすれば良いと思いますが、この辺りはイメージ出来ますでしょうか?(キーワードを上げましたので調べてみてください。)
マクロと言う事で進めて参りましたが、私的にはExcelの機能である検索を使うかな、
>パソコンに疎い方も使う資料のため、だれでも検索できるように検索ボックスを設置したいと考えています。
これを持ち出すときりがないですね。
PCやExcelの使い方を覚えるのと同じで覚えてしまえば簡単です。
むしろ、スキルが上がり他の場面でも使いこなす事が出来れば、万事良しと思いますがどうでしょう。
ちなみに、検索機能ですべてを検索で結果が出る下の表示部分にカーソルを当てCtrl+Aキーで検索されたすべてのセルが選択できます。
なので、入力など(選択を変えない)をしてEnterで次の選択セルに移動できるかと思います。
No.7
- 回答日時:
No4です
>エンターで次の候補へ進むには~~
想像するところ、「通常のエクセルの機能を使いながら、特定のマクロの機能もを行したい」ってことだと思いますけれど、(No4でも触れましたが)お決まりの手順通りではないUIを実現しようとすると結構面倒です。
やりたいことだけを思い付きのように記述すれば済むわけではなく、起こり得るケース全体を想定してそれに対する処理全体を記述しておく必要があるからです。
以下は、「エンターキーで次の検索セルに進む」という内容のマクロです。
最低限なので、あまり実用的ではありませんけれど、ご参考までに・・・
新規の標準モジュールにコピペしてください。
(以下の例でも、「次のセルを選択」する処理は2行で済んでいます。残りの行数は、ほとんどが「最低限のUI」のための処理です)
※ 対象範囲内でだけ、Enterキー入力で次の検索セルへ進みます。
(範囲外では通常の動作になります)
※ ユーザーにはマクロ実行中か否かがわからないので、実行中はステータスバーに「検索モード」の表示をしています。(注意しないとわからないですけれど…)
お使いのシートで背景色などを用いていなければ、実行中のみ対象範囲に背景色を付けるなどとした方がわかり易くなるでしょう。
※ 「検索モード」(=マクロ実行中)から抜け出すには、ESCキーを押すなどしてください。
※ キーへの反応が敏感すぎるので、感度を落とすためにタイマーで遅延させています。
感度が悪すぎるようなら時間を短くし、良すぎる場合は長くと変更してください。
※ 最初に実行する場合は、「findWord」をそのまま実行します。
Private Declare PtrSafe Function GetAsyncKeyState Lib "User32.dll" (ByVal vKey As Long) As Integer
Private Sub findWord()
Dim sht As Worksheet, rng As Range, words As String
Dim c As Range, t As Single
Const message1 = "検索ワードは見つかりません"
words = InputBox("検索語句を入力")
If words = "" Then Exit Sub
Set sht = ActiveSheet
Set rng = Range("C40:C400")
Set c = rng.Find(what:=words, after:=Range("C400"), _
LookIn:=xlValues, lookat:=xlPart)
If c Is Nothing Then
MsgBox message1
Else
c.Activate
t = Timer
Application.StatusBar = "***** 検索モード *****"
Do Until GetAsyncKeyState(vbKeyEscape) <> 0
DoEvents
If GetAsyncKeyState(vbKeyReturn) <> 0 Then
If Not ActiveSheet Is sht Then Exit Do
If Not Intersect(ActiveCell, rng) Is Nothing Then
DoEvents
If Timer - t > 0.2 Then
Set c = rng.FindNext(ActiveCell)
If c Is Nothing Then
MsgBox message1
Exit Do
Else
c.Activate
End If
t = Timer
End If
End If
End If
Loop
End If
Application.StatusBar = False
End Sub
ご親切にご教示くださり、ありがとうございます。
教えていただいたマクロで試してみようと思います!
全くの初心者が無謀な挑戦をしてしまいましたが、
非常に勉強になりました。
引き続き基礎の部分から学んでいこうと思います。
本当にありがとうございました。
No.5
- 回答日時:
こんにちは
#3の補足コメントについて
#3のコードはプロシージャになっていませんのでコンパイルエラーは
当然かと思います。
Sub test()
ここに#3のコードすべてを入れてください
End Sub
testをボタンなどに登録してボタンを押して実行します。
プロシージャ名testは暫定です。
A1セルに入力されている文字が検索文字になります。
No.4
- 回答日時:
こんにちは
>マクロを試行錯誤で試してみましたが、
>どうもうまく機能しません
何をどう試したのかもわかりませんし、UIをどうしたいのかもわかりませんが、基本的には対象範囲に対してFINDメソッドで、LookAt:=xlPart (=部分一致)で行えばご質問の検索を行うことは可能と思われます。
https://docs.microsoft.com/ja-jp/office/vba/api/ …
先にまとめて全体を検索して変数等に記憶しておく方法もあれば、都度、次のセルを探す方法もあると思われますが、どちらが適しているのかは質問者様がお考えの内容次第でしょう。
目視で確認するだけなら、面倒なUIなどを作成しなくてもすむ方法として、まとめて該当セルに色を付けてしまうなども考えられそうな気がしますけれど・・・
初歩的な質問に対して、コメントありがとうございました!
行数が多いため、該当セルに色をつけるだけではスクロールが大変でして…。もう少し勉強してみます。
No.3
- 回答日時:
こんにちは
使い方をどうするかは、お任せ、A1セルの値で検索
例:
Dim Rng As Range, FindCell As Range
Set Rng = Range("C40:C400")
If Intersect(ActiveCell, Rng) Is Nothing Then Range("C400").Activate
Set FindCell = Rng.Find( _
What:=Range("A1").Value, _
After:=ActiveCell, _
LookIn:=xlValues, _
LookAt:=xlPart, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=True, _
MatchByte:=False, SearchFormat:=False)
If Not FindCell Is Nothing Then FindCell.Activate
細かい事は考えていません
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA 検索と入力 Excel ブック ぶぶぶ シート ししし 列V 検索対象の列です 最終行は、お 6 2023/05/17 01:40
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
- Excel(エクセル) VLOOKUP が機能しない、その原因は何 ? 8 2022/10/19 12:06
- 格安スマホ・SIMフリースマホ GooglePixelで端末内のアプリを検索する方法を教えてください。 アプリ一覧に表示される検索ボ 2 2023/05/15 00:55
- Excel(エクセル) エクセルでこのようなことはできますか? 3 2022/07/10 19:57
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) エクセルのマクロで対象ごとにシート分けしてその内容をセルに書き込みたい 9 2022/08/24 13:23
- Excel(エクセル) 指定値をマクロで検索&シート移動 2 2022/04/27 23:29
- Visual Basic(VBA) 顧客ごとに違う点検案内を作成するマクロ 4 2022/09/16 05:34
このQ&Aを見た人はこんなQ&Aも見ています
-
一回も披露したことのない豆知識
あなたの「一回も披露したことのない豆知識」を教えてください。
-
【お題】動物のキャッチフレーズ
【お題】「百獣の王 ライオン」「実は動物界最強 カバ」は分かるけど、それはちょっとピンと来ないなと思った動物のキャッチフレーズ
-
"I love you" をかっこよく翻訳してみてください
あなたが考えるいちばんかっこいい "I love you"の訳を教えてください。
-
チョコミントアイス
得意ですか?不得意ですか?できれば理由も教えてください。
-
この人頭いいなと思ったエピソード
一緒にいたときに「この人頭いいな」と思ったエピソードを教えてください
-
Excel2016 検索の窓を常時表示させたいのですが、教えてください。
Excel(エクセル)
-
Excelのワークシート上に検索窓とボタンを作りたい
Excel(エクセル)
-
【エクセル】フリーワード検索用の検索窓を作りたいです。その検索結果を一覧で表示させたいです。
Excel(エクセル)
-
-
4
エクセル ブックを開いたときに検索ウインドを表示させたい
Excel(エクセル)
-
5
検索関数を使って検索窓を作成したいんですが・・・
その他(Microsoft Office)
-
6
【エクセルで一発検索機能をつくる】
Excel(エクセル)
-
7
エクセルのvbaで検索ボタンを作る
Visual Basic(VBA)
-
8
エクセルVBAで、条件に一致するセルへ移動
Excel(エクセル)
-
9
エクセルでENTERを押すと数式がそのまま文字列になってしまう
Excel(エクセル)
-
10
エクセルの検索窓で毎回検索場所のブックを選択するのが面倒
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・昔のあなたへのアドバイス
- ・字面がカッコいい英単語
- ・許せない心理テスト
- ・歩いた自慢大会
- ・「I love you」 をかっこよく翻訳してみてください
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・はじめての旅行はどこに行きましたか?
- ・準・究極の選択
- ・この人頭いいなと思ったエピソード
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELで特定のセルに表示...
-
エクセル 数字をすべて○などの...
-
Excel内での検索結果をシート...
-
クリックすると文章が表示され...
-
Excel ハイパーリンクのURLを別...
-
エクセルでセルをダブルクリッ...
-
Excel:セルの値(文字列)を数...
-
Excelで、図形内の文字をセルに...
-
エクセル 未入力セルがあると...
-
現在のセルの位置を返す関数は...
-
エクセルでPDFリンクを大量...
-
マクロを実行すると画像がズレ...
-
エクセルマクロ 赤色の文字を検...
-
アポストロフィーの一括挿入 ...
-
選択したセル範囲に入っている...
-
エクセルでページ数をあるセル...
-
セルがクリックされた回数をカ...
-
太字に設定されているセルの個...
-
Excel2007 色のカウント (VBA)
-
図のハイパーリンクを別のセル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで特定のセルに表示...
-
Excel内での検索結果をシート...
-
エクセル 数字をすべて○などの...
-
クリックすると文章が表示され...
-
Excelで、図形内の文字をセルに...
-
太字に設定されているセルの個...
-
Excel ハイパーリンクのURLを別...
-
Excelでセルをクリックす...
-
現在のセルの位置を返す関数は...
-
Excel:セルの値(文字列)を数...
-
フォントの色を指定して削除出...
-
エクセルでPDFリンクを大量...
-
セルがクリックされた回数をカ...
-
エクセルでセルをダブルクリッ...
-
エクセル 未入力セルがあると...
-
【EXCEL】先週の月曜日の日付を...
-
アポストロフィーの一括挿入 ...
-
マクロを実行すると画像がズレ...
-
セルの内容をテキストボックス...
-
空白セルを空セルに置き換える...
おすすめ情報
コメントありがとうございます。
パソコンに疎い方も使う資料のため、だれでも検索できるように検索ボックスを設置したいと考えています。
できなければ検索機能を使うようにします。
ご丁寧にご教示いただき、ありがとうございます!
試してみましたが、2行目のSetと3行目のActiveCellについて、
プロシージャの外では無効とのコンパイルエラーが出てしまい、解決できそうもありませんでした。
自分でもう少し勉強してみます。
補足コメントを入れた後に自分でも初歩的なミスだと気付き、無事検索できるようになりました!
ありがとうございます!
ただ、複数の該当セルがある場合、
次のセルを見るためには毎回コマンドボタンを押さなければいけないのですね…。
行数が膨大なため、都度一番上の行まで戻ってコマンドボタンを押すのが現実的ではありませんでした(><)
エンターで次の候補へ進むには、やっぱり元々の検索機能を使うしかないのでしょうか。
たびたび大変恐れ入ります。