エクセル2003を使用しています。
シートの並びについて、文字列(名前順)ではなく、数値順に並び替えたいのですが、
どのようなマクロを組めば良いのでしょうか?
↓これですと、シートの並びが文字列(名前順)になってしまうので、ダメなんです。
-------------------------------
Sub Sort()
Dim intLoopA As Integer
Dim intLoopB As Integer
For intLoopA = 1 To Sheets.Count
For intLoopB = 1 To Sheets.Count - 1
If Sheets(intLoopB).Name > Sheets(intLoopB + 1).Name Then
Sheets(intLoopB).Move After:=Sheets(intLoopB + 1)
End If
Next intLoopB
Next intLoopA
End Sub
-------------------------------
例として、 01.午前中/02.午後/100/300/50/テスト ではなく、
理想型は 01.午前中/02.午後/50/100/300/テスト の順番です。
シート名に番号+日本語を付けているのがあるのは、数字の並び順になって欲しい対策です。
分かりやすくするために簡略化いたしましたが、
実際は300ほどのシートがバラバラに出入りし、それらは連番ではありません。
数値順にするvbaをよろしければ教えて頂けませんでしょうか。
よろしくお願いいたします。
yamayama456様
シート名を数値化すれば良いかと思います。
注)文字だけの時は頭1文字を文字コード順に並べています。
お試しください。
Sub Sort()
Dim intLoopA As Integer
Dim intLoopB As Integer
For intLoopA = 1 To Sheets.Count - 1
For intLoopB = intLoopA + 1 To Sheets.Count
If シートNO(Sheets(intLoopA)) > シートNO(Sheets(intLoopB)) Then
Sheets(intLoopB).Move before:=Sheets(intLoopA)
End If
Next intLoopB
Next intLoopA
End Sub
Function シートNO(シート As Worksheet) As Long
シートNO = Val(シート.Name)
If シートNO <> 0 Then Exit Function
シートNO = Val("&H700" & Hex$(Asc(シート.Name)))
End Function
お礼
jcctaira様 >シート名を数値化すれば良いかと思います。 ヒントと回答、ありがとうございます! ばっちり希望通りにできました!! vba初心者なので、中身の解読に時間がかかりますが、 これからしっかり見て、勉強いたします。 本当に助かりました! ありがとうございました。