フィルタリング検索ボックスを作成します
定期的に更新されるカレンダーのフィルタリング検索ボックスを作成しようとしています.会社、州、種類、または名前の4つのフィールドのうちの1つにテキストで検索できるようになりたいです.私はVBAを使う必要があることを知っていますが、私は書く方法がわかりません
コード.
任意の助けが高く評価されています
レニー
返信リスト(回答:5)
抽出するデータの例を含むワークブックのコピーが必要になります.コピーをonedrive
にアップロードします.
「会社、州、タイプ、または名前」がデータの列である場合は、オートフィルターを試すことができると思います(オートフィルターの適用方法と使用方法については、ヘルプを参照してください)
応答3# ->にスキップ5 #OssieMa 1こんにちはレニー
zipファイルを次のリンクにアップロードしました.変更が必要な場合は、確認して私に連絡してください.
機能しません.検索条件では大文字と小文字が区別されないため、大文字または小文字のいずれかを使用できます.
これにより、ユーザーは検索用に最小限のテキストを入力でき、システムは先頭と末尾の両方のワイルドカードを自動的に追加し、フィルターをセルに設定します 入力したテキストを含む.
ユーザーはさらにワイルドカードを入力することもできるため、[会議の種類]フィールドから「SMARTLab-認定看護」を希望する場合は、「smart* nurs」(二重引用符なし)と入力するだけで、すべての「SMARTLab-認定看護」が検索されます.看護」.
ユーザーが「SMARTLab」が完全に一致するレコードのみが必要な場合は、検索条件を「smart lab」のように一重引用符で囲み、「smartlab」と完全に一致するフィールドのみを返します..
同様の問題を抱えている他の人を助けることができるように、情報の次のコード.
Sub SetFilters()
Dim shp As Shape
Dim strCaption As String
Dim rngFiltHead As Range
Dim lngFiltCol As Long
Dim strFilter As String
If Trim(Activesheet.OLEObjects( "txtSearch").Object.Value)= "" Then
Beep
MsgBox "検索値を入力してください." &vbCrLf&_
"処理が終了しました."
Exit Sub
End If
For Each shp In Activesheet.Shapes
If shp.Type=msoFormControl Then
If shp.FormControlType=xlOptionButton Then
'次の行は、オプションボタンのキャプションを変数に割り当てます
If shp.ControlFormat.Value=1 Then'選択すると1になります
strCaption=Trim(shp.TextFrame.Characters.Caption)
Exit For
End If
End If
End If
Next shp
'オプションボタンのキャプションに一致する列ヘッダーを検索します
With Activesheet.AutoFilter.Range.Cells
rngFiltHead=.Find(What:= strCaption、_
LookIn:= xlFormulas、_
LookAt:= xlPart、_
SearchOrder:= xlByColumns、_
SearchDirection:= xlNext、_
MatchCase:= False)
If Not rngFiltHead Is Nothing Then
If Activesheet.AutoFilterMode=False Then 'オートフィルターがオンになっていない場合
rngFiltHead.AutoFilter'オートフィルターをオンにします
End If
lngFiltCol=rngFiltHead.Column 'フィルターを設定するための列番号を保存します
その他
ビープ音
MsgBox "問題.オプションボタンのキャプションで示されるヘッダーが見つかりません."_
&vbCrLf&"処理が終了しました."
Exit Sub
End If
End With
strFilter=Trim(Activesheet.OLEObjects(" txtSearch ").Object.Value)
If InStr(1、strFilter、Chr(39))>0 Then '一重引用符で囲まれている場合
'フィルターを正確に検索条件に設定
strFilter ="=" &Replace(strFilter、Chr(39)、 ""、1)
Else
'次の行は、検索用に先頭と末尾のアスタリスクワイルドカードを追加します
strFilter="=*"&Activesheet.OLEObjects( "txtSearch" ).Object.Value& "*"
End If
'次の行の "AutoFilter.Range"はオートフィルターの総称範囲であるため、_
追加の行(または行)が追加されても問題ありません.削除済み)
Activesheet.AutoFilter.Range.AutoFilter Field:= lngFiltCol、Criteria1:= strFilter
If WorksheetFunction.Subtotal(3、Activesheet.AutoFilter.Range.Columns(lngFiltCol))= 1 Then
Beep
MsgBox "フィルターは何も見つかりませんでした.検索フィルターを再入力します."_
&vbCrLf&strCaption&"フィルターはクリアされます."
Activesheet.AutoFilter.Range.AutoFilter Field:= lngFiltCol '何も見つからない場合はフィルターを削除します
End If
サブの終了
Sub ClearFilters()
With Activesheet
If.AutoFilterMode Then
If.FilterMode Then
Activesheet.ShowAllData
End If
End If
End With
Activesheet.OLEObjects( "txtSearch").Object.Value=""
End Sub
応答5# ->にスキップ2 #valuesmOssieMac、
これはまさに私が探していたものです.ありがとうございました!将来必要になった場合に、フィールドの名前を更新する方法も考え出しました.
本当に、あなたの専門知識と共有する意欲に本当に感謝しています.
レニー
応答2# ->にスキップ1 #OssieMaこんにちはレニー、
返信ありがとうございます.私は実際に上記の説明を含めるつもりでしたが、投稿時に頭がおかしくなったに違いありません.ただし、サンプルコードを理解するための努力は、有能なプログラマーになるために大いに役立ちます.