- ベストアンサー
エクセルマクロVBAでシート名のソート方法
- エクセルのシート名をVBAでソートする方法を探しています。特定のグループだけをソートし、その他のシートはそのままにしたいです。しかし、2桁の数字が入ると上手くソートできません。
- シート名をソートするためのVBAコードを作成中です。特定のグループのシートのみをソートし、その他のシートはそのままにしたいです。しかし、2桁の数字が含まれるとソートがうまくいきません。
- エクセルのマクロ(VBA)でシート名のソート方法を教えてください。特定のグループのシートだけをソートし、その他のシートはそのままにしたいです。ただし、2桁の数字が入るとソートができません。どのようにしたらいいでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
まぁ、チカラワザというよりは乱暴なだけですが: sub macro2() dim i as long, u as long for i = 1 to worksheets.count if left(worksheets(i).name, 3) = "aaa" then u = application.max(u, val(replace(worksheets(i).name, "aaa", ""))) end if next i on error resume next for i=1 to u worksheets("aaa" & i).move after:=worksheets(worksheets.count) next i end sub
その他の回答 (1)
- keithin
- ベストアンサー率66% (5278/7941)
>aaaのものだけをソートしてシート後ろに移動できればいいです。 ざっくり作ってみただけなので読みにくいですが。 Sub macro1() Dim aaa() Dim i As Long, n As Long For i = 1 To Worksheets.Count If Worksheets(i).Name Like "aaa*" Then ReDim Preserve aaa(n) aaa(n) = Val(Replace(Worksheets(i).Name, "aaa", "")) n = n + 1 End If Next i qsort aaa, 0, UBound(aaa) For i = 0 To UBound(aaa) Worksheets("aaa" & aaa(i)).Move after:=Worksheets(Worksheets.Count) Next i End Sub Private Sub qsort(aaa, l, u) Dim cp As Long Dim ix1 As Long Dim ix2 As Long Dim buf1 As Long Dim buf2 As Long If l >= u Then Exit Sub cp = (l + u) \ 2 buf1 = aaa(cp) aaa(cp) = aaa(l) ix2 = l ix1 = l + 1 Do While ix1 <= u If aaa(ix1) < buf1 Then ix2 = ix2 + 1 buf2 = aaa(ix2) aaa(ix2) = aaa(ix1) aaa(ix1) = buf2 End If ix1 = ix1 + 1 Loop aaa(l) = aaa(ix2) aaa(ix2) = buf1 Call qsort(aaa, l, ix2 - 1) Call qsort(aaa, ix2 + 1, u) End Sub
お礼
ありがとうございます。 結構複雑になっちゃうんですね。
お礼
ありがとうございます。 短いですね。すごいです。