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

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

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

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

Q&A

解決済

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

Buretan
dokugaku_genkai

総合スコア29

VBA

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

1回答

0グッド

0クリップ

238閲覧

投稿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・・・
というような普通の順番で並びませんでした。

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

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

meg_

2022/12/02 14:37

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

2022/12/03 03:35 編集

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

回答1

1

ベストアンサー

テキスト比較で大小判定しているからですね。テキストだと先頭から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

総合スコア32018

spoofy_dragon😄を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

Buretan

2022/12/03 03:29

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

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

VBA

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