- ベストアンサー
エクセルマクロで検索ボックスを作成する
- エクセルのシート上でテキストボックスとコマンドボタンを配置し、オートフィルタで検索結果を表示する方法について質問があります。
- 質問者は、現在B列に複数の文字データが入力されており、オートフィルタのオプションから「を含む」で検索していますが、テキストボックスに検索したい文字を入力してボタンを押すことで同じような結果が得られる方法を知りたいと考えています。
- また、質問者は検索範囲をB列に限定する必要がなく、シート全体で検索したいとも述べています。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 > 2回目から検索ができません。 > 検索範囲がB列に限定されてしまいます。 > シート状のすべてで検索することはできるでしょうか。 フィルターの扱いですから、検索ではなくて抽出ですね。 シート左上からの連続領域全体(タイトル行除く)で、 テキストボックスに入力されいている値に合致するセルが、 見つかれば、その行を表示 ひとつも見つからなければ、その行は非表示 といった内容のマクロを書きました。 繰り返し使用できます。 但し、 普通のフィルター(リンク先で言うオートフィルタ)では 出来ませんので、 [フィルター]の[詳細設定](VBAではAdvancedFilter)を 使うことになります。 その為、フィルター使用時のように 1行めにドロップダウンが表示されることはありません。 (必要なら後から付け加えることもできますが、、、?) その他は元々の使い方と大体変わりません。 また、シートの保護が設定されている等、 説明されていない特殊な状況がある場合には、 それぞれ手当てを加えて使うことになります。 とりあえず、今ある記述に差し替えて験してみて下さい。 ' ' /// Option Explicit Private Sub CommandButton1_Click() Dim Target As Range, rCrit As Range, sCrit As String Dim nR As Long, cnC As Long, i As Long Application.ScreenUpdating = False On Error Resume Next ActiveSheet.ShowAllData On Error GoTo 0 sCrit = "=""*" & TextBox1.Value & "*""" Set Target = Cells.CurrentRegion nR = Target.Rows.Count + 2 cnC = Target.Columns.Count Set rCrit = Cells(nR, 1).Resize(cnC + 1, cnC) For i = 1 To cnC rCrit(i) = Cells(i) rCrit(i + 1, i) = sCrit Next i Target.AdvancedFilter _ Action:=xlFilterInPlace, _ CriteriaRange:=rCrit, _ Unique:=False rCrit.ClearContents Application.ScreenUpdating = True End Sub Private Sub CommandButton2_Click() On Error Resume Next ActiveSheet.ShowAllData On Error GoTo 0 End Sub ' ' ///
お礼
早速の回答ありがとうございます。 2回目以降も検索できるようになりました。 ですが、別の問題が出てきてしまいました。 画像を見ていただきたいので、別の質問を出しています。 どうぞよろしくお願い致します。