- ベストアンサー
ExcelVBAで複数の検索結果を選択する方法と読み検索の可否について
- ExcelVBAで複数の検索結果をメッセージボックスの選択によって選択する方法を提案します。例えば、特定のキーワードで複数の結果を返し、ユーザーが選択する形式で表示します。また、読み検索の可否についても説明します。
- ExcelVBAを使用して、特定のキーワードで部分検索を行い、複数の結果を取得する方法について解説します。さらに、取得した結果に対してメッセージボックスを表示させ、ユーザーが選択することで最終結果を取得する方法も説明します。
- ExcelVBAで部分検索を行い、複数の結果をメッセージボックスで選択する方法について解説します。具体的なコード例を使用して、検索結果の表示と選択の処理を実装します。また、読み検索についても取り上げ、可否についての情報も提供します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
コンボのアイテムに、「田中」、「小田中」、「田中原」を3行表示し、見た人が「小田中」だと択んで 小田中に決める、と言うのが普通ではないかな。 ーー とりあえずやってみると データ Sheet1 A列 *田中* <--とど入力する。入力してコマンドボタンクリック。 大田 <-以下データ 小田中 田中 田中原 上田中 上田 木村 元田中 大田原 中原組 シートにコンボボックスとコマンドボタンを1つ貼り付け。(フォームの場合と違う) 検索の操作をしてマクロの記録を採る。 これを大幅?に変更して 標準モジュールに Sub Macro1() Range("A1").Activate Set x = Cells.Find(What:=Range("a1"), After:=ActiveCell, LookIn:=xlFormulas, LookAt _ :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ False, MatchByte:=False, SearchFormat:=False) If x Is Nothing Then MsgBox "該当なし" Exit Sub Else 'MsgBox x Worksheets("Sheet1").ComboBox1.Clear Worksheets("Sheet1").ComboBox1.AddItem x End If x.Activate Do Set y = Cells.FindNext(After:=ActiveCell) If y = Range("A1") Then Exit Do Else 'MsgBox y Worksheets("Sheet1").ComboBox1.AddItem y y.Activate End If Loop End Sub コマンドボタンのイベントに Private Sub CommandButton1_Click() Macro1 End Sub コンボのイベントに Private Sub ComboBox1_Change() Range("C1") = ComboBox1.Text End Sub ーーー これでA1に「*田中*」と入れてコマンドボタンをクリック。 コンボのアイテムに 小田中 田中 田中原 ・・ がセットされているから、その中の1つを択ぶとC1セルにセットするという模擬的な例。 「*田中*」の*は手入力に任せたほうが自由度があると思う。プログラムで名前の前後に添えてもよい。 一応テスト済み。 ーーー どうも質問表現から、VBAの経験は少ないと思うが、こんなレベルのことをやろうとするのは早すぎると思う。Find、FindNextメソッドの使い方は私も苦手。良くわからなければ全行INSTR関数で田中と言う文字を含むかチェックするのはどうかな。 またシステムと言うもので、対ユーザーとの絡みのことは奥が深く色んな意見もでて難しいから今後経験して 十分考えてください。 参考 該当分抜き出しは関数でも作業列を使ったり、むつかしい関数の組み合わせで出来る。 Googleで「imogasi方式」で照会してみてください。
その他の回答 (2)
- kmetu
- ベストアンサー率41% (562/1346)
折角エクセルに検索があるのですからそれを利用して あとはツールバーにマクロのアイコン登録して関連つけたマクロに 指定セルがA1なら Range("A1").Value = Selection.Value とだけ記述しとけば事足りると思うのですが
お礼
早速のご返答ありがとうございます。 なるほど、確かにそのとおりですね・・・。 ありがとうございます。 参考にさせていただきます。
- aloha8761
- ベストアンサー率12% (11/89)
それって使う人間がイライラすると思うけど・・ ループ処理とMsgBoxの戻り値による条件処理でできるけど それよりは ユーザーフォームを使ったほうがいいと思うけど・・ 検索結果をLabelを使って5個くらい表示させて この中にあればそれを選んで(チェックボックスを使うか Labelをクリックして もらうかなど)もらうようにしたほうがいいと思うが・・ また、せっかくワークシートがあるんだからワークシートを 使って 検索結果のみのレコードを表示させ 対象レコードをダブルクリックなどで処理させるなども使いかってはよいと思うけど・・ 使用者の事を考えてt作ったほうがいいと思います
お礼
早速のご回答ありがとうございます。 なるほど、確かに検索結果を一括で表示した方が見やすいですね・・・。 良いアイデアをありがとうございました。 上記の方法を調べてみます。
お礼
早速のご返答ありがとうございます。 非常に分かりやすく、ご回答くださりありがとうございます。 また、当方、確かにVBA初心者のためちょっと早すぎたかもしれません・・・。 勉強しつつ、試行錯誤していきたいと思います。