検索・並べ替え
コマンドボタンウィザードで検索する
デザインビューからコマンドボタンウィザードで検索ボタンを作成すると簡単に検索が行えます。
Private Sub コマンド1_Click() Screen.PreviousControl.SetFocus DoCmd.DoMenuItem acFormBar, acEditMenu, 10, , acMenuVer70 End Subご覧のようにウィザードを使って検索ボタンを作成すると、ソースではメニューバーから「検索」コマンド を呼び出しています。
もし特定のコントロールを検索したいのであれば、「DoCmd.GoToControl "コントロール名"」で指定しますします。
Private Sub コマンド1_Click() Dim SearchTxt As String DoCmd.GoToControl "氏名" 'コントロール「氏名」へ移動 SearchTxt = InputBox("氏名の入力") 'InputBoxに検索語を入力 'SearchTxt入力された文字列が空でない時だけ検索を行う If Len(SearchTxt) > 0 Then DoCmd.FindRecord SearchTxt, , , , , , True End If End Sub
あいまいな検索を行う
あいまいな検索を行うには検索語に*(アスタリスク)を付けて行います。「Like」は使いません
Private Sub コマンド1_Click() Dim SearchTxt As String DoCmd.GoToControl "氏名" 'コントロール「氏名」へ移動 SearchTxt = InputBox("氏名の入力") 'InputBoxに検索語を入力 '「次を検索」で「はい」が押された間検索を行う While MsgBox("次を検索", vbYesNo) = vbYes DoCmd.FindRecord "*" & SearchTxt & "*", , True, , True, , True DoCmd.FindNext Wend End Sub
コンボボックスで検索する
コンボボックスウィザードで検索を行うコンボボックスをつくることができます。
Private Sub 検索コンボ_AfterUpdate() ' コントロールの値と一致するレコードを検索する Dim rs As Object Set rs = Me.Recordset.Clone rs.FindFirst "[フリガナ] = '" & Me![検索コンボ] & "'" Me.Bookmark = rs.Bookmark End Sub上記の例では、検索コンボの値がフォームの「フリガナ」コントロールの値と一致するレコードまで移動します。
検索は指定した条件のレコードまで移動するだけなので、フォーム上で利用するにはフィルターやクエリーの方が効果的 だと思います。
並べ替えを行う
フォームのレコードを並べ替えて表示するには、レコードソースのクエリーに並べ替え条件を指定 すれば良いのですが、表示後に再度並べ替えを行うには「OrderBy = 並べ替え条件」を利用します。
'フォーム読み込み時に「frm_UserList」の並べ替えを解除する Private Sub Form_Load() Forms![UserList].OrderBy = "" End Sub ************************************************************************** Private Sub コマンド1_Click() '「コマンド1」がクリックされたら「frm_UserList」の「フルガナ」フィールドで '並べ替えを昇順(ASD)で実行する Forms![UserList].OrderBy = "フルガナ ASC" End Sub ************************************************************************** Private Sub フレーム1_AfterUpdate() '「フレーム1」のオプション値が更新されたら以下の条件で並べ替えを実行する Select Case Me!フレーム1 Case 1 'オプション値 1 Forms![UserList].OrderBy = "顧客番号 ASC" '昇順 Case 2 'オプション値 2 Forms![UserList].OrderBy = "フルガナ ASC" '昇順 Case 3 'オプション値 3 Forms![UserList].OrderBy = "電話番号 ASC" '昇順 Case 4 'オプション値 4 Forms![UserList].OrderBy = "生年月日 DESC" '降順 Case 5 'オプション値 5 Forms![UserList].OrderBy = "入会日 EDSC" '降順 Case 6 'オプション値 6 Forms![UserList].OrderBy = "登録日 DESC" '降順 End Select End Sub
複数条件で並べ替えを行う
複数条件で並べ替えを行うには、「OrderBy」句の条件を ,(コンマ)で区切ります。
また、条件式を使うことによってユーザーに並べ替え条件を指定させることができます。
'フォーム読み込み時に「frm_UserList」の並べ替えを解除する Private Sub Form_Load() Forms![UserList].OrderBy = "" End Sub ************************************************************************** Private Sub フレーム1_AfterUpdate() '「フレーム」のオプション値が更新されたら以下の条件で並べ替えを実行する Select Case Me!フレーム1 Case 1 'オプション値 1 登録日が新しいフリガナ昇順 Forms![UserList].OrderBy = "登録日 DESC , フルガナ ASC" Case 2 'オプション値 2 年齢順でフリガナ昇順 Forms![UserList].OrderBy = "生年月日 ASC , フルガナ ASC" End Select End Sub ************************************************************************** <<<<<<<<<<<<<<< 複数条件での並べ替え >>>>>>>>>>>>>>>>>> フィールドリストをレコードソースとする複数のコンボボックスに、対応する オプションボタンで昇順・降順を設定して並べ替えをコマンドボタンで実行する --------------------------------------------------------------------------- Private Sub コマンド_Click() Dim Sortkey1 As String '1番目のフィールド Dim Sortkey2 As String '2番目のフィールド Dim Sortkey3 As String '3番目のフィールド Dim Order As String '並べ替え順序 Select Case Me!コンボ1 '1番目のフィールド Case 1 Sortkey1 = Me!コンボ1 & "ASC" '昇順 Case 2 'オプション値 2 年齢順でフリガナ昇順 Sortkey1 = Me!コンボ1 & "DESC" '降順 End Select Select Case Me!コンボ2 '2番目のフィールド Case 1 Sortkey2 = Me!コンボ2 & "ASC" '昇順 Case 2 'オプション値 2 年齢順でフリガナ昇順 Sortkey2 = Me!コンボ2 & "DESC" '降順 End Select Select Case Me!コンボ3 '3番目のフィールド Case 1 Sortkey3 = Me!コンボ3 & "ASC" '昇順 Case 2 'オプション値 2 年齢順でフリガナ昇順 Sortkey3 = Me!コンボ3 & "DESC" '降順 End Select '1番目と2番目だけ選択 If IsNull(Me!コンボ1) = False And IsNull(Me!コンボ2) = False And IsNull(Me!コンボ3) = True Then Sort = Sortkey1 & "," & Sortkey2 ElseIf IsNull(Me!コンボ1) = False And IsNull(Me!コンボ2) = False And IsNull(Me!コンボ3) = False Then Sort = Sortkey1 & "," & Sortkey2 & "," & Sortkey3 End If Forms![UserList].OrderBy = Sort Forms![UserList].OrderByOn = True End Sub