Categories: VBA基礎

EXCEL VBA ワークシートの並び替え・任意の順番・昇順・降順・複数シートの移動(Moveメゾット)

 

 

EXCEL VBA ワークシートの並び替え・任意の順番・昇順・降順・複数シートの移動(Moveメゾット)

 

 

●はじめに

今回説明するのは、Moveメソッド の利用方法を説明します。Moveメゾットは、ワークシートを指定したい場所へ移動する時に利用します。登録したワークシートの順番を入れ替えたり、ワークシート名て昇順・降順などを行う時に、Moveメゾットを利用してワークシートの移動を行います。それでは、サンプルプログラムを交えて順番に説明いたします。

 

●【EXCEL VBA ワークシートの追加・複数追加・先頭・最後(Worksheets.Addメゾット)については、下記を参照して下さい】

 

●【Worksheets.Moveメゾット (Excel)、下記を参照して下さい】(Microsoft社 様)】
https://docs.microsoft.com/ja-jp/office/vba/api/excel.formatconditions

 

 

 

●書式の説明

● Moveメゾットを利用するには、下記の通りに設定を行います。

 Object.Move(Before, After)

 

引数データ型・省略説明・内容
BeforeVariant型・省略可指定したワークシートの前に移動します。
AfterVariant型・省略可指定したワークシートの後に移動します。

 

【使用例①】指定してワークシートを一番左(先頭)に移動する。

【サンプルプログラム①】

'
'
Sub SheetMove01() 'Sheet3を一番右に移動
    Worksheets("Sheet3").Move Before:=Worksheets(1)
End Sub
'

 

【使用例②】指定したワークシートを一番右(最後)に移動する。

 

【サンプルプログラム②】

'
'
Sub SheetMove02() 'Sheet3を一番左に移動
    Worksheets("Sheet3").Move After:=Worksheets(Worksheets.Count)
End Sub
'

 

 

 

 

 

 

EXCEL VBA ワークシートの並び替え・任意の順番・昇順:配列を使って並び替え(Moveメゾット)

 

 

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

下記のサンプルプログラムは、Moveメゾットを利用して複数のワークシートに対して並び替えを行います。今回は、配列を利用して昇順にワークシートを並び替えます。ワークシートを並び替える際に、配列内でバブルソートを利用します。

【プログラムの流れ】
① ワークシート名を保管する配列を作成する。
② ワークシートのカウント数で配列を再定義する。
③ ブック内の全てのワークシートを繰り返す。
④ 配列内のワークシート名をバブルソートで並び替えを行います。
⑤ 配列内のワークシート名に対して並び替えを行います(昇順)
⑥ ワークシート名をソートした1件目をシートを一番左に移動します。
⑦ ワークシート名をソートした2件目から最後まで順番に並び替えした順に移動します。

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

Move01(サンプルプログラム)

 

 

'
'
Sub SheetMove03() '配列を使ってワークシート名で並び替えを行う。(昇順)

    Dim Ws As Worksheet
    Dim I, L, Cont As Long
    Dim wsTemp(), Temp As String 'ワークシート名を保管する配列を作成する。

    ReDim wsTemp(Worksheets.Count) 'ワークシートのカウント数で配列を再定義
    
    I = 1
    For Each Ws In Worksheets 'ブック内の全てのワークシートを繰り返す。
        wsTemp(I) = Ws.Name  'シート名を配列に順番に格納します。
        I = I + 1
    Next Ws
    
    For I = UBound(wsTemp) To LBound(wsTemp) Step -1 '配列内のワークシート名をバブルソートで並び替えを行います。
        For L = LBound(wsTemp) To I - 1
    
            If wsTemp(L) > wsTemp(L + 1) Then   '配列内のワークシート名に対して並び替えを行います(昇順)
                Temp = wsTemp(L)
                wsTemp(L) = wsTemp(L + 1)
                wsTemp(L + 1) = Temp
            End If
        Next L
    Next I
    
    Worksheets(wsTemp(1)).Move Before:=Worksheets(1)  'ワークシート名をソートした1件目をシートを一番左に移動します。
    
    For I = 2 To Worksheets.Count 'ワークシート名をソートした2件目から最後まで順番に並び替えした順に移動します。
        Worksheets(wsTemp(I)).Move After:=Worksheets(I - 1)
    Next I
    

End Sub
'

 

 

●実行前~実行後 ※プログラム実行後、ワークシート名が昇順に並び変わりました。
(画面クリックして拡大)

 

 

EXCEL VBA ワークシートの並び替え・任意の順番・降順:配列を使って並び替え(Moveメゾット)

 

 

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

下記のサンプルプログラムは、上記のサンプルプログラム①と同様に、Moveメゾットを利用して複数のワークシートに対して並び替えを行います。今回も、配列を利用して降順にワークシートを並び替えます。ワークシートを並び替える際に、配列内でバブルソートを利用します。

【プログラムの流れ】
① ワークシート名を保管する配列を作成する。
② ワークシートのカウント数で配列を再定義する。
③ ブック内の全てのワークシートを繰り返す。
④ 配列内のワークシート名をバブルソートで並び替えを行います。
⑤ 配列内のワークシート名に対して並び替えを行います(降順)
⑥ ワークシート名をソートした1件目をシートを一番左に移動します。
⑦ ワークシート名をソートした2件目から最後まで順番に並び替えした順に移動します。

 

 

 

'
'
'
Sub SheetMove04()  '配列を使ってワークシート名で並び替えを行う。(降順)

    Dim Ws As Worksheet
    Dim I, L, Cont As Long
    Dim wsTemp(), Temp As String 'ワークシート名を保管する配列を作成する。

    ReDim wsTemp(Worksheets.Count) 'ワークシートのカウント数で配列を再定義
    
    I = 1
    For Each Ws In Worksheets 'ブック内の全てのワークシートを繰り返す。
        wsTemp(I) = Ws.Name  'シート名を配列に順番に格納します。
        I = I + 1
    Next Ws
    
    For I = UBound(wsTemp) To LBound(wsTemp) Step -1 '配列内のワークシート名をバブルソートで並び替えを行います。
        For L = LBound(wsTemp) To I - 1
    
            If wsTemp(L) < wsTemp(L + 1) Then  '配列内のワークシート名に対して並び替えを行います(降順)
                Temp = wsTemp(L)
                wsTemp(L) = wsTemp(L + 1)
                wsTemp(L + 1) = Temp
            End If
        Next L
    Next I
    
    Worksheets(wsTemp(0)).Move Before:=Worksheets(1)  'ワークシート名をソートした1件目をシートを一番左に移動します。
    
    For I = 1 To Worksheets.Count - 1 'ワークシート名をソートした2件目から最後まで順番に並び替えした順に移動します。
        Worksheets(wsTemp(I)).Move After:=Worksheets(I)
    Next I
    

End Sub
'

 

 

●実行前~実行後 ※プログラム実行後、ワークシート名が降順に並び変わりました。
(画面クリックして拡大)

 

 

 

EXCEL VBA ワークシートの並び替え・並び替え用のワークシートを追加してワークシートの並び替え:昇順(Moveメゾット)

 

 

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

下記のサンプルプログラムは、並び替え用ワークシートを追加して、そのワークシートに全てのワークシート名を書き出して、ソートで並び替えを行いワークシートを順番に並び替えます。

 

【プログラムの流れ】
① 並び替え用のワークシートを追加します。
② 全てのワークシートを繰り返します。
③ 全てのワークシート名を並び替え用のワークシートに出力します。
④ 並び替え用のワークシートに取得したワークシート名をソート(昇順:xlAscending)する。 (降順は、xlDescending)に設定する。
⑤ ソートしたワークシート名の1番目をワークシートの一番左に移動します。
⑥ ソートした2番目から順番にワークシートを移動させます。(全部のワークシート)
⑦ 並び替え用のワークシートを削除する際のアラートメッセージを非表示にする。
⑧ 並び替え用に使用したワークシートを削除します。

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

Move03(サンプルプログラム)

 

 

 

'
'
Sub SheetMove05()  '並び替え用のワークシートを作成しワークシートの並び替えを行う。

    Dim I As Long
    
    With Worksheets.Add '並び替え用ワークシートを追加します。
                
        For I = 1 To Worksheets.Count  '全てワークシートを繰り返す。
            .Cells(I, "A").Value = Worksheets(I).Name  '全てのワークシートを並び替え用のワークシートに出力します。
        Next I
      
            .Range("A1").CurrentRegion.Sort Key1:=.Range("A1"), Order1:=xlAscending  '取得したワークシート名をソート(昇順:xlAscending)する
        
        Worksheets(.Cells(1, "A").Value).Move Before:=Worksheets(1)  ' ワークシート名をソートした1番目をシートを一番左に移動します。
        
        For I = 2 To Worksheets.Count  'ソートした2番目から順番にワークシートを移動させます。
            Worksheets(.Cells(I, "A").Value).Move After:=Worksheets(I - 1)
        Next I
        
     
        Application.DisplayAlerts = False  'ワークシートを削除する際のアラートメッセージを非表示にする。
        .Delete '並び替え用に使用したワークシートを削除します。
        Application.DisplayAlerts = True  'アラートメッセージを表示にする。
    
    End With



End Sub
'

 

 

●実行前~実行後 ※プログラム実行後、ワークシート名が昇順に並び変わりました。今回のプログラムでは、並び替え用のワークシートを追加して並び替えが終わったら削除する仕組みになっています。
(画面クリックして拡大)

 

 

 

EXCEL VBA ワークシートの並び替え・並び替え用のワークシートを追加してワークシートの並び替え:昇順(Moveメゾット)

 

 

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

下記のサンプルプログラムは、並び替え用ワークシートを追加して、そのワークシートに全てのワークシート名を書き出して、ソートで並び替えを行いワークシートを順番に並び替えます。今回のプログラムでは、指定した独自の並び替えを行い、ワークシートを並び替えます。通常の並び替え(昇順・降順)では、指定した並び替えが出来ないので、下記の方法を利用する事で、独自の並び替えでワークシートの並び替えを行う事が出来ます。

 

 

【プログラムの流れ】
① 並び替え用のワークシートを追加します。この追加したワークシートでワークシート名の並び替えを行います。(独自ソート順)
② ブック内の全てのワークシート名を並び替え用のワークシートに出力します。
③ プログラム内に記載されている指定した独自の並び替えを設定します。(総務部⇒人事部⇒経理部⇒企画部⇒事業部の順で並び替えます。)
※指定に無いデータがワークシート名に有る場合は、最後に並びます。
④ セルのA1を起点にセル範囲を取得し、③の独自の並び替えで実行します。
⑤ 並び替え用のワークシートに独自の並び替えが実行され、独自の並び替えの1番目のシートを1番左に移動します。
⑥ 独自の並び替えの2番目以降が、順番にワークシートが移動されます。
⑦ ワークシートの並び替えが終わったので、並び替え用のワークシートを削除する際のアラートメッセージを非表示にする。
⑧ 並び替え用で使用したワークシートを削除します。
⑨ アラートメッセージを表示する。

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

Move04(サンプルプログラム)

 

 

'
'
Sub SheetMove06()  '指定した順番にワークシートの並び替えを行う。

    Dim I As Long
    
    With Worksheets.Add '並び替え用ワークシートを追加します。
                
        For I = 1 To Worksheets.Count  '全てワークシートを繰り返す。
            .Cells(I, "A").Value = Worksheets(I).Name  '全てのワークシートを並び替え用のワークシートに出力します。
        Next I
        
        With .Sort
        
            With .SortFields
                .Clear  'SortField'オブジェクトをクリアします。(前回情報を削除)
                .Add Key:=Range("A1"), SortOn:=xlSortOnValues, Order:=xlAscending, _
                    CustomOrder:="総務部,人事部,経理部,企画部,事業部", DataOption:=xlSortNormal
            End With
            
            .SetRange Range("A1").CurrentRegion   '並べ替え範囲を設定
            .Header = xlNo  '先頭行を見出しとして使用しません。
            .Apply '上記の設定で並べ替えを実行
         
         End With
        
        Worksheets(.Cells(1, "A").Value).Move Before:=Worksheets(1)  ' ワークシート名をソートした1番目をシートを一番左に移動します。
        
        For I = 2 To Worksheets.Count  'ソートした2番目から順番にワークシートを移動されます。
            Worksheets(.Cells(I, "A").Value).Move After:=Worksheets(I - 1)
        Next I
        
        Application.DisplayAlerts = False  'ワークシートを削除する際のアラートメッセージを非表示にする。
        .Delete '並び替え用に使用したワークシートを削除します。
        Application.DisplayAlerts = True  'アラートメッセージを表示にする。
    
    End With


End Sub
'

 

 

●実行前~実行後 ※ プログラム実行後、独自に指定したワークシート名で並び変わりました。今回のプログラムでは、独自のワークシート名の指定順で並び替えを行う事が出来ました。
(画面クリックして拡大)

 

 

 

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

 

AKIRA