• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルマクロVBAのシートのソート)

エクセルマクロVBAでシート名のソート方法

このQ&Aのポイント
  • エクセルのシート名をVBAでソートする方法を探しています。特定のグループだけをソートし、その他のシートはそのままにしたいです。しかし、2桁の数字が入ると上手くソートできません。
  • シート名をソートするためのVBAコードを作成中です。特定のグループのシートのみをソートし、その他のシートはそのままにしたいです。しかし、2桁の数字が含まれるとソートがうまくいきません。
  • エクセルのマクロ(VBA)でシート名のソート方法を教えてください。特定のグループのシートだけをソートし、その他のシートはそのままにしたいです。ただし、2桁の数字が入るとソートができません。どのようにしたらいいでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.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

devid
質問者

お礼

ありがとうございます。 短いですね。すごいです。

その他の回答 (1)

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

>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

devid
質問者

お礼

ありがとうございます。 結構複雑になっちゃうんですね。

関連するQ&A