質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

633閲覧

excelのシートを昇順で並べ替えるマクロを作成。意図通りに並び替えられない

Buretan

総合スコア32

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2022/12/02 14:13

excelのシートがバラバラに並んでいる状態のものをマクロで昇順に並び替えたい
シート名:「資料1」~「資料200」のように漢字+数字の組み合わせ

使用したコード

VBA

1 2Sub SortSheetsTabName() 3 Application.ScreenUpdating = False 4 Dim iSheets%, i%, j% 5 iSheets = Sheets.Count 6 For i = 1 To iSheets - 1 7 For j = i + 1 To iSheets 8 If Sheets(j).Name < Sheets(i).Name Then 9 Sheets(j).Move before:=Sheets(i) 10 End If 11 Next j 12 Next i 13 Application.ScreenUpdating = True 14End Sub 15

Microsoft Learnより引用

<結果>
資料1、資料10~資料19、資料100~ ・・・ 資料199
資料2、資料20~資料29,資料200~
上記のような順で並んでしまい、資料1、2、3・・・
というような普通の順番で並びませんでした。

シート名が漢字+数字だと、意図したソートはできないのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2022/12/02 14:37

数字部分の桁数を揃えたシート名にするか、数値部分のみで比較してはどうでしょうか?
Buretan

2022/12/03 03:35 編集

桁数を資料001、資料002とかにするということですね。 そのやり方で意図した並び順になりました。 ありがとうございます。 また、数値のみの比較検討の提案もありがとうございます。
guest

回答1

0

ベストアンサー

テキスト比較で大小判定しているからですね。テキストだと先頭から1文字ずつ比較していきますので、"10"と"2"なら、 まず"1"と"2"を比較して"2"の方が大きいので"10"<"2"となります。

名前の3文字目以降を切り取って数値化して比較すればいいでしょう。

vba

1Sub SortSheetsTabName() 2 Application.ScreenUpdating = False 3 Dim iSheets%, i%, j% 4 iSheets = Sheets.Count 5 For i = 1 To iSheets - 1 6 For j = i + 1 To iSheets 7 If Val(Mid(Sheets(j).Name, 3)) < Val(Mid(Sheets(i).Name, 3)) Then 8 Sheets(j).Move before:=Sheets(i) 9 End If 10 Next j 11 Next i 12 Application.ScreenUpdating = True 13End Sub

投稿2022/12/03 00:50

編集2022/12/03 02:14
hatena19

総合スコア33715

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Buretan

2022/12/03 03:29

なるほど、文字列比較だからそうなっていたんですね。 なんとなく比較方法に原因があるかとは思ってたんですが、そのあたりの調べ方がよくわからず悶々としてました。 お陰様で大変よく理解できました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問