【ACCESS VBA】並び替えたいときはどんなコード?
いろんな条件で並び替えたい
社員情報を新規追加登録するタイミングは
新しく社員が入社したときです
入社順にどんどん追加されていきますので
トーゼン 並び順も入社順となります
もしくは 主キーとなる社員コード順 となります
でも 業務中 社員情報がこんな順番で並んでたら
もっと便利やのになぁ というシーンがたびたび出てきます
この記事では いろんなパターンで並び順を指定してフォームを開く方法と
開いている帳票フォームから いろんなパターンで並び替える方法をご紹介します
動画で説明 音無し 5分13秒
1. 並び替えを指定してフォームを開く
動作の流れ
並び替えたい項目を 『社員コード』『かな』『入社日』のなかから
オプションボタンで選びます
次に 選んだ項目を 『昇順』で並び替えるか
『降順』で並び替えるかを オプションボタンで選びます
『開く』 コマンドボタンで 社員マスタが 並び替えられて表示されます
例えば 『かな』の『昇順』で開くボタンをクリックすると
このようにカナ順に並んだ社員マスタが開きます
フォームの作り方
【並び替えたい項目は】
オプショングループ
名前:grp_01
オプションボタン
①社員コード
名前:opt1_1
オプション値:1
②かな
名前:opt1_2
オプション値:2
③入社日
名前:opt1_3
オプション値:3
【並び替え順は】
オプショングループ
名前:grp_02
オプションボタン
①昇順
名前:opt2_1
オプション値:1
②降順
名前:opt2_2
オプション値:2
コマンドボタン
名前:cmb_open
標題:開く
VBAコード
並び替えたい項目と並び替え順をオプションボタンで選び
『開く』コマンドボタンをクリックしたときのイベントプロシージャ
Option Compare Database
Option Explicit
Private Sub cmd_open_Click()
Dim fld As String
Dim srt As String
Select Case Me.grp_01
Case 1
fld = "staff_code"
Case 2
fld = "staff_kana"
Case 3
fld = "nyusha_date"
End Select
Select Case Me.grp_02
Case 1
srt = "ASC"
Case 2
srt = "DESC"
End Select
DoCmd.OpenForm "F_02_S"
Forms!F_02_S.OrderBy = fld & " " & srt
Forms!F_02_S.OrderByOn = True
End Sub
コード解説
Dim fld As String
変数 fld を文字型で宣言します
並び替える項目のフィールド名を取得するための変数です
Dim srt As String
変数 srt を文字列で宣言します
並び替え順 "ASC" "DESC" を代入する変数です
Select Case Me.grp_01
Select Case文は、変数の値または条件式によって処理を分岐させたい場合に使用します。
Case~の後に値または条件式を入れ、条件式を満たす場合にCase以降の処理が実行されます。
つまり オプショングループの値 Me.grp_01 で得た値によって処理を分岐させます
Case 1
fld = "staff_code"
Case 2
fld = "staff_kana"
Case 3
fld = "nyusha_date"
オプショングループよりオプション値 1 (社員コード)を選んだら
変数 fld に "staff_code" を代入します
オプション値 2 (かな)を選んだら
変数 fld に "staff_kana" を代入します
オプション値 3 (入社日)を選んだら
変数 fld に "nyusha_date" を代入します
End Select
Select Case 文の終わりには必ず End Select が必要です
Select Case Me.grp_02
Case 1
srt = "ASC"
Case 2
srt = "DESC"
End Select
同様に Select case 文で
オプショングループ grp_02 より
オプション値 1 (昇順)を選んだら
変数 srt に "ASC" を代入します
オプション値 2 (降順)を選んだら
変数 srt に "DESC" を代入します
DoCmd.OpenForm "F_02_S"
Forms!F_02_S.OrderBy = fld & " " & srt
Forms!F_02_S.OrderByOn = True
フォーム F_02_S を開きます
OrderBy句に 代入した文字列を指定します
fld & " " & srt
例えば 「かな」の「昇順」を選んだ場合
staff_kana ASC
となり
OrderByOn 句を True にして並び替えを実行します
【まとめ】並び替えを指定してフォームを開く
会社で業務中
『最近 入社した者をみたい』
そんなシーンはしばしばあります
あと 年齢順やかな順 血圧が高い人順とか
通勤車両のナンバー順(僕の前にある車 誰の?どけてほしいんだけど)
などなど
いろいろな条件で並び替えられた情報が簡単に得られれば便利です
2. フォームを開いてから並び替えを指定と並び替えの解除
1は フォームを開く前に並び替えの条件を指定しました
今回は 開いているフォームから 並び替えを行います
動作の流れ
社員マスタの帳票フォームが開いています
フォームヘッダーに 3つのコンボボックスが並んでいます
ひとつめのコンボボックスから 『部署』
ふたつめのコンボボックスから 『性別』
みっつめのコンボボックスから 『入社日』を選んで
『並び替える』コマンドボタンをクリックすると
部署順 性別順 入社日の昇順に並び替わります
『並び替え解除』コマンドボタンをクリックするともとのコード順に戻ります
フォームの作り方
コンボボックス
① 名前:cbo_fld1
値集合ソース:"部署";"性別"
値集合タイプ:値リスト
連結列:1
既定値:"部署"
② 名前:cbo_fld2
値集合ソース:"部署";"性別"
値集合タイプ:値リスト
連結列:1
既定値:"部署"
③ 名前:cbo_fld3
値集合ソース:"かな";"入社日"
値集合タイプ:値リスト
連結列:1
既定値:"かな"
コマンドボタン
① 名前:cmd_sort
標題:並び替える
② 名前:cmd_kaijo
標題:並び替え解除
VBAコード
『並び替える』コマンドボタンのクリック時イベントプロシージャ
Private Sub cmd_sort_Click()
Dim fld1 As String
Dim fld2 As String
Dim fld3 As String
Select Case Me.cbo_fld1
Case "部署"
fld1 = "busho_code"
Case "性別"
fld1 = "gender"
End Select
Select Case Me.cbo_fld2
Case "部署"
fld2 = "busho_code"
Case "性別"
fld2 = "gender"
End Select
Select Case Me.cbo_fld3
Case "かな"
fld3 = "staff_kana"
Case "入社日"
fld3 = "nyusha_date"
End Select
Me.OrderBy = fld1 & "," & fld2 & "," & fld3
Me.OrderByOn = True
End Sub
コード解説
Dim fld1 As String
Dim fld2 As String
Dim fld3 As String
変数 fld1 fld2 fld3 を文字型で宣言します
Select Case Me.cbo_fld1
Case "部署"
fld1 = "busho_code"
Case "性別"
fld1 = "gender"
End Select
最初のコンボボックス Me.cbo_fld1 の値により 変数 fld1 に並び替えるフィールド名を代入します
Select Case Me.cbo_fld2
Case "部署"
fld2 = "busho_code"
Case "性別"
fld2 = "gender"
End Select
同様に ふたつめのコンボボックス Me.cbo_fld2 の値により 変数 fld2 にフィールド名を代入します
Select Case Me.cbo_fld3
Case "かな"
fld3 = "staff_kana"
Case "入社日"
fld3 = "nyusha_date"
End Select
最後のコンボボックスも同様です
Me.OrderBy = fld1 & "," & fld2 & "," & fld3
Me.OrderByOn = True
変数 fld1 fld2 fld3 を , で結合した文字列で 並び替えを適用します
『並び替え解除』コマンドボタンのクリック時イベントプロシージャ
Private Sub cmd_kaijo_Click()
Me.OrderBy = vbNullString
Me.OrderByOn = False
End Sub
コード解説
Me.OrderBy = vbNullString
並び替えの設定をクリアします
Me.OrderByOn = False
並び替えの適用を解除します
【まとめ】フォームを開いてから 並び替え・解除
フォームを開いた状態で 並び替えや解除ができれば
さらに迅速に必要な情報が得られます
フォームヘッダーのセクション内に いろんなコントロールを配置し
多様な条件で並び替えを試してみましょう