検索・並べ替え


コマンドボタンウィザードで検索する

デザインビューからコマンドボタンウィザードで検索ボタンを作成すると簡単に検索が行えます。

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