[[20200924110137]] 『シート名をテーブルで指定した順番に並べ替えたい』(しのみや) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『シート名をテーブルで指定した順番に並べ替えたい』(しのみや)

 教えてください

 【テーブル】
    A   B   C
 1   順番
 2 いちご
 3 りんご
 4 メロン
 5 もも

 【シート】
 もも|いちご|メロン

 *テーブルにはあって、シート名がない場合があります

 このページを参考にさせてもらいました
 https://vbabeginner.net/vbaでシートを任意の順番で並べ替える/

 この記述ですと、
 AddSheetの一覧にあって、その名前のシートがない場合エラーになります

 Sheets(ar(i)).Move before:=Sheets(i + 1)←エラーになる部分

 記載されている記述は、
  シート名をAddSheetに書き出す
  ↓
  手作業で順番を変える
  ↓
  シートを並べ替える
 ですので、その名前のシートがないケースは当てはまらないので当然です

 エラーの場合に、OnErrorで回避はなるべく使いたくないのですが…
 どういう風に書き換えたらよいか、もしくはこの記述は今回は合わないので使わないほうがよいか等
 教えて頂けると助かります

< 使用 Excel:Excel2010、使用 OS:Windows10 >


>OnErrorで回避はなるべく使いたくないのですが…
とのことですので希望とは違うのでしょうが、あんまり深く悩まず、とりあえず末尾シートの【後ろ】に移動させていったら?
    Sub 実験01()
        Dim i As Long

        With Worksheets("テーブル")
            On Error Resume Next
            For i = 2 To .Cells(.Rows.Count, "A").End(xlUp).Row
                Worksheets(.Cells(i, "A").Value).Move after:=Worksheets(Worksheets.Count)
            Next i
            On Error GoTo 0
        End With

    End Sub

(もこな2) 2020/09/24(木) 13:07


 Sub main()
    Dim c As Range, i As Long
    For Each c In Sheets("テーブル").Range("A:A").SpecialCells(2)
        For i = 1 To Sheets.Count
            If Sheets(i).Name = c.Value Then
                Sheets(i).Move After:=Sheets(Sheets.Count)
                Exit For
            End If
        Next i
    Next c
End Sub
(mm) 2020/09/24(木) 13:08

 もこな2さん mmさん 
 必要な結果が得られました
 ありがとうございました
(しのみや) 2020/10/02(金) 15:00

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.