見出し画像

【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
 並び替えの適用を解除します

【まとめ】フォームを開いてから 並び替え・解除

フォームを開いた状態で 並び替えや解除ができれば
さらに迅速に必要な情報が得られます
フォームヘッダーのセクション内に いろんなコントロールを配置し
多様な条件で並び替えを試してみましょう


いいなと思ったら応援しよう!