Categories: VBA基礎

EXCEL VBA ユーザー設定をリスト使ったソート(並び替え)指定した文字列順(SortFields.Add )

 

EXCEL VBA ユーザー設定リストを使ったSort(並び替え)指定した文字列順にソート・独自の並び替え(SortFields.Add メソッド)

 

 

●はじめに

今回説明するのは、独自のユーザー設定リストを使った並び替えを行うSortFields.Add メソッドの利用方法を説明致します。通常ソートを使うと「数字」や「あいうえお」の昇順・降順となりますが、独自の並び替えを行うには、SortFields.Add メソッドを利用する事で可能となります。このメゾットを利用する事で都道府県・区市町村順・役職順・会社の部署順など独自の並び替えが可能になります。それでは、サンプルプログラムを交えて順番に説明いたします。

●【SortFields.Add メソッドの利用方法については、下記を参照して下さい(Microsoft社 様)】
https://docs.microsoft.com/ja-jp/office/vba/api/excel.sortfields.add

 

 

●書式の説明

● SortFields.Add メソッドを利用するには、下記の通りに設定を行います。

● SortFields.Add(key,SortOn,Order,CustomOrder,DataOption)

 

パラメータ必須 / オプションデータが型説明・内容
Key必須Range並び替えのキー値を指定します。
SortOn省略可能Variant並び替える対象を指定します。
Order省略可能Variant並び替え順を指定します。
CustomOrder 省略可能Variantユーザー設定の並び替えデータを指定します。(順序)
DataOption省略可能Variantデータオプションを指定します。

【Key】・・・並び替えのキー値をセル範囲で指定します。

【SortOn】・・・並び替える対象を指定します。

定数説明・内容
xlSortOnValues値を指定します。
xlSortOnCellColorセルの色を指定します。
xlSortOnFontColorフォントの色を指定します。
xlSortOnIconアイコンを指定します。

【Order】・・・昇順・降順の並び替えを指定します。

定数内容・説明
xlAscending昇順で並び替える。
xlDescending降順で並び替える。

【CustomOrder】・・・

 

【DataOption】・・・数値・テキストを並び替える方法を指定します。

定数内容・説明
xlSortNormal数値とテキストを別々に並び替える。
xlSortTextAsNumbersテキストを数値データとして並び替える。

 

【使用例】
・”宮崎支店,熊本支店,盛岡支店,富山支店,福島支店”のオリジナルの並び替え順で並び替えを実行します。

【使用例:サンプルプログラム】

'
'
Sub 並び替え_Sample()
 
    With ActiveSheet.Sort
    
        With .SortFields
            .Clear  'SortField'オブジェクトをクリアします。(前回情報を削除)
            .Add Key:=Range("B1"), SortOn:=xlSortOnValues, Order:=xlAscending, _
            CustomOrder:="宮崎支店,熊本支店,盛岡支店,富山支店,福島支店", DataOption:=xlSortNormal
            '新しい並び替えフィールドを作成します。
            
        End With
            .SetRange Range("B1").CurrentRegion '並べ替え範囲を設定
            .Header = xlYes  '先頭行を見出しとして使用します。
            .Apply '上記の設定で並べ替えを実行
        
    End With
 
End Sub
'

 

 

 

 

 

 

EXCEL VBA ユーザー設定リストを使ったSort(並び替え)指定した部署・役職順にソート・独自の並び替え(SortFields.Add メソッド)

 

 

●プログラム説明 (サンプル①)

下記のサンプルプログラムは、独自の並び替えを行うSortFields.Add メソッドを利用した方法で「部署順」・「役職順」の2つのデータを独自の順番で並び替えを行うサンプルプログラムです。独自のルールでの並び替えが出来る事でどんな並び替えも簡単に並び替える事ができます。それでは、順番に説明いたします。

【プログラムの流れ】

① SortField’オブジェクトをクリアします。
② A列の部署データに対して指定した部署順に並び替えを指定します。
③ B列の部署データに対して指定した役所順に並び替えを指定します。
④ 並び替えを実行する範囲をセルA1起点に範囲を指定します。
⑤ 並び替えを指定したセル範囲の先頭行を見出しとして指定します。
⑥ ②・③の指定した並び替え順で並び替えを実行します。

【ソート順】
① 総務部⇒人事部⇒経理部⇒企画部⇒事業部
② 部長⇒次長⇒課長⇒係長⇒主任
※ ソート順に該当しない文字列や空白が有る場合は、ソートの順番は最後(最下位)になります。

 

 

'
'
Sub 並び替え_Sample01() '指定した事業部・部署順に並び替えを実行
 
    With ActiveSheet.Sort
    
        With .SortFields
            .Clear  'SortField'オブジェクトをクリアします。(前回情報を削除)
            .Add Key:=Range("A1"), SortOn:=xlSortOnValues, Order:=xlAscending, _
            CustomOrder:="総務部,人事部,経理部,企画部,事業部", DataOption:=xlSortNormal
            '新しい並び替えフィールドを作成します。(部署順)
            .Add Key:=Range("B1"), SortOn:=xlSortOnValues, Order:=xlAscending, _
            CustomOrder:="部長,次長,課長,係長,主任", DataOption:=xlSortNormal
            '新しい並び替えフィールドを作成します。(役職順)
            
        End With
            .SetRange Range("A1").CurrentRegion '並べ替え範囲を設定
            .Header = xlYes  '先頭行を見出しとして使用します。
            .Apply '上記の設定で並べ替えを実行
        
    End With
 
End Sub
'

 

 

●実行前~実行後 ※プログラム実行後、部署別・役職別に指定されたソート順に並び替えが実行されました。
(画面クリックして拡大)

 

 

 

EXCEL VBA ユーザー設定リストを使ったSort(並び替え)横列・縦列の並び替え 勘定科目 ・四半期・独自の並び替え(SortFields.Add メソッド)

 

 

●プログラム説明 (サンプル②)

下記のサンプルプログラムは、独自の並び替えを行うSortFields.Add メソッドを利用した方法で、縦列と横列のクロスの並び替えを行います。今回のサンプルプログラムでは、縦列は、勘定科目・横列は、四半期で独自の順番で並び替えを行います。それでは、順番に説明いたします。

【プログラムの流れ】

① SortField’オブジェクトをクリアします。
② A列の勘定科目データに対して指定した勘定科目順に並び替えを指定します。
③ 並び替えを実行する範囲をセルA1起点に範囲を指定します。
④ ②の指定した並び替え順で並び替えを実行します。(縦方向)
⑤ SortField’オブジェクトをクリアします。
⑥ A列の勘定科目データに対して指定した四半期順に並び替えを指定します。
⑦ 並び替えを実行する範囲をセルA1起点に範囲を指定します。
⑧ ⑥の指定した並び替え順で並び替えを実行します。(横方向)

【ソート順】
① 備消品費⇒通信運搬費⇒修繕費⇒諸手数料⇒雑費⇒合計
② 勘定科目⇒第一四半期⇒第二四半期⇒第三四半期⇒第四四半期⇒年間合計

 

 

'
'
Sub 並び替え_Sample02()  '縦列・横列に対して独自の並び替えを実行
 
    
    With ActiveSheet.Sort
    
        With .SortFields
            .Clear  'SortField'オブジェクトをクリアします。(前回情報を削除)
            .Add Key:=Range("A1"), SortOn:=xlSortOnValues, Order:=xlAscending, _
            CustomOrder:="備消品費,通信運搬費,修繕費,諸手数料,雑費,合計", DataOption:=xlSortNormal
            '新しい並び替えフィールドを作成します。(部署順)
            
        End With
            .SetRange Range("A1").CurrentRegion '並べ替え範囲を設定
            .Orientation = xlTopToBottom '縦方向に並び替えする
            .Header = xlYes  '先頭行を見出しとして使用します。
            .Apply '上記の設定で並べ替えを実行
            
        With .SortFields
            .Clear  'SortField'オブジェクトをクリアします。(前回情報を削除)
            .Add Key:=Range("A1"), SortOn:=xlSortOnValues, Order:=xlAscending, _
            CustomOrder:="勘定科目,第一四半期,第二四半期,第三四半期,第四四半期,年間合計", DataOption:=xlSortNormal
            '新しい並び替えフィールドを作成します。(役職順)
            
        End With
            .SetRange Range("A1").CurrentRegion '並べ替え範囲を設定
            .Orientation = xlLeftToRight '横方向に並び替えする
            .Apply '上記の設定で並べ替えを実行
        
    End With
 
End Sub
'

 

 

●実行前~実行後 ※プログラム実行後、勘定科目別(縦列)・四半期別(横列)に指定されたソート順に並び替えが実行されました。
(画面クリックして拡大)

 

 

EXCEL VBA ユーザー設定リストを使ったSort(並び替え)別シートに結果を表示(SortFields.Add メソッド)

 

 

●プログラム説明 (サンプル③)

下記のサンプルプログラムは、独自の並び替えを行うSortFields.Add メソッドを利用した方法で並び替え、並び替えた結果を別シートに転記するサンプルプログラムです。今回のサンプルプログラムでは、ワークシート「Data」に社員番号順の社員情報一覧が登録されています。このデータを元に、オリジナルで指定した並び替えを行い結果を別シートの「Result」に転記するサンプルプログラムです。

 

【オリジナル並び替え順位】
① 部署  :総務部⇒人事部⇒経理部⇒企画部⇒事業部
② 役職  :部長⇒次長⇒課長⇒係長⇒主任
③ 出身地 :北海道⇒秋田⇒福島⇒栃木⇒新潟⇒埼玉⇒東京⇒神奈川⇒愛知⇒京都⇒大阪

 

 

【プログラムの流れ】
① ワークシート「Result」をクリアーします。(転記先:結果)
② ワークシート「Data」のデータをワークシート「Result」へ転記します。
③ SortField’オブジェクトをクリアします。
④ ワークシート「Result」のC列の部署データに対して指定した部署順に並び替えを指定します。
⑤ ワークシート「Result」のD列の役職データに対して指定した役職順に並び替えを指定します。
⑥ ワークシート「Result」のE列の都道府県データに対して指定した都道府県順に並び替えを指定します
⑦ ④⑤⑥の指定した並び替え順で並び替えを実行します。(縦方向)
⑧ ワークシート「Result」をアクティブシートにします。

【プログラム実行条件】
・ワークシート「Data」に社員データを登録します。
・ワークシート「Result」を作成します。(シート作成のみ)

★【サンプルプログラム】
下記のリンク先よりサンプルプログラムをダウンロードする事ができます。

SortFields(並び替え)

 

 

'
'
Sub 並び替え_Sample03() '指定した部署順・役職順・都道府県順で並び替えを実行・結果を別シート
 
    Dim ws01, ws02 As Worksheet

    Set ws01 = Worksheets("Data")
    Set ws02 = Worksheets("Result")
 
    ws02.Cells.Clear 'ワークシート(Result:結果)をクリアーします。
    
    ws01.Range("A1").CurrentRegion.Copy ws02.Range("A1")  '(ワークシート「Data」⇒「Result」へコピー貼り付けます。
    
    With ws02.Sort
    
        With .SortFields
            .Clear  'SortField'オブジェクトをクリアします。(前回情報を削除)
            .Add Key:=Range("C1"), SortOn:=xlSortOnValues, Order:=xlAscending, _
            CustomOrder:="総務部,人事部,経理部,企画部,事業部", DataOption:=xlSortNormal
            '新しい並び替えフィールドを作成します。(部署順)
            .Add Key:=Range("D1"), SortOn:=xlSortOnValues, Order:=xlAscending, _
            CustomOrder:="部長,次長,課長,係長,主任", DataOption:=xlSortNormal
             '新しい並び替えフィールドを作成します。(役職順)
            .Add Key:=Range("E1"), SortOn:=xlSortOnValues, Order:=xlAscending, _
            CustomOrder:="北海道,秋田,福島,栃木,新潟,埼玉,東京,神奈川,愛知,京都,大阪", DataOption:=xlSortNormal
            '新しい並び替えフィールドを作成します。(都道府県順)
            
        End With
            .SetRange ws02.Range("A1").CurrentRegion   '並べ替え範囲を設定
            .Header = xlYes  '先頭行を見出しとして使用します。
            .Apply '上記の設定で並べ替えを実行
        
    End With
    
    ws02.Activate  '処理結果のシート「Result」を表示します。
 
End Sub
'

 

 

●実行前~実行後 ※プログラム実行後、指定したオリジナルの並び替え順で別シートに転記されました。
(画面クリックして拡大)

 

 

最後まで、ご覧いただきまして誠に有難うございました。
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。

 

 

AKIRA