No.4ベストアンサー
- 回答日時:
> 必ずしも、今回の例のように、4桁プラスαということでもないのですが・・・
前にも書きましたが、もし3桁があると200 は、1000 より後に(昇順時で)
なりますよ。 文字列ですから・・・
シート名を付ける基準を書いていただければ、それなりにコーディング
できるのですが、解らない部分は、推測するないですからね。
まぁ、使って見てください。 ごくろうさま。
ありがとうございます。今のところ、これで十分です。また、わからなくなったら、新たに質問したいと思いますので、そのとき見つけたらよろしくお願いします。
No.3
- 回答日時:
> 私の何が悪いのでしょうか?
「実行時エラー」は、全て作る側の責任です。ここは単純ミスです。
> 私には、規則がわからない順に並んでいます。
そうね。これはちょっと解んないと思いますよぉ~。
1234は、"イチニサンシ(ヨン?)" でソートになったかも知れませんよ。
漢字のシート名を「振り仮名」でソートしたい場合に対応させようとした
のが数字まで仮名になったようです。
汎用性を持たせて、余分な機能を付加したのが、仇になったようです。
何となく気になっていたのですが、やはり検証不足でした。ごめん。
質問で「シートがsheet1~sheet**まで並んでいます。」とありましたので
sheet に続く番号が、1桁~3桁あるとすれば、そのまま文字列で処理すると
例え昇順でソートすると Sheet12 が Sheet3 より 前に来てしまいます。
ですから、質問を見て番号を「数値」に変換する必要性を感じた訳です。
どうもそうではなくて4桁プラスα のようなので「文字列」で処理しました。
今回、シート名の例を書いて頂いたので、それに合うよう変更しました。
下記コードに入れ替えてください。
たぶん、これでいいかと思います。
Sub SortSheets()
Dim Wwh As Worksheet
Dim N As Integer
Const UpDown = 1 ' <---- 1=昇順 / 2=降順 を指定
Application.ScreenUpdating = False
Sheets.Add Before:=Worksheets(1)
Set Wwh = ActiveSheet
With Wwh
.Visible = False
For N = 2 To Worksheets.Count
.Cells(N - 1, 1).Value = Worksheets(N).Name
.Cells(N - 1, 2).Value = "'" & .Cells(N - 1, 1).Text
Next N
If UpDown <> 2 Then
.Range("A1").CurrentRegion.Sort Key1:=.Range("B1"), _
Order1:=xlAscending, Header:=xlNo, OrderCustom:=1
Else
.Range("A1").CurrentRegion.Sort Key1:=.Range("B1"), _
Order1:=xlDescending, Header:=xlNo, OrderCustom:=1
End If
For N = 1 To .Range("A1").End(xlDown).Row
Worksheets(.Cells(N, 1).Text).Move After:=Sheets(N)
Next N
End With
For N = 2 To Worksheets.Count
If Worksheets(N).Visible = xlSheetVisible Then
Worksheets(N).Activate
Exit For
End If
Next N
Application.DisplayAlerts = False
Wwh.Delete
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Set Wwh = Nothing
End Sub
色々とありがとうございます。
>ですから、質問を見て番号を「数値」に変換する必要性を感じた訳です。
>どうもそうではなくて4桁プラスα のようなので「文字列」で処理しました。
必ずしも、今回の例のように、4桁プラスαということでもないのですが、4桁プラスαのものが一番多いですし、今回のVBAで試してみたいと思います。
今、いくつかのファイルを試したら、全てOKでした。ありがとうございました。
色々な方のVBAを参考にしながら、自分でもと思いますが、なかなか難しくて。本当にありがとうございました。
No.2
- 回答日時:
次のマクロを実行すると、ご希望通り、シートが並べ替えられると思います。
シート名を、その名称の共通部分に付加される数値でシートを並べ替えます。
共通部分を指定しないときは、シート名を「漢字振り仮名順」で並べ替えます。
ただし、この場合は、MS-IMEを使用しているものとします。
共通部分を指定した場合、その前後ともに数字がある場合は、双方の数字を
連結した値を基準に整列します。(つまり、前に付いても、後ろについてもOKです。)
Excel2000か、それ以降に対応します。
一応、ご存知かも知れませんが、VBAの設定方法を書いておきます。
1.Alt + F11 で VBE(Visual Basic Editor)を開きます。
2.VBE のメニューから[挿入] -->[標準モジュール] を指定します。
3.モジュールウィンドウに下記コードをコピーして貼り付けます。
4.4~5行目を実情に合わせ設定します。
5.Alt + Q (または、右上隅の×)でウィンドウを閉じ、シートに戻ります。
6.メニューから[ツール]-->[マクロ]-->[セキュリティ]で「セキュリティレベル」を
「中」にして[OK]します。
7.実行するときは、Alt + F8 (メニューから[ツール]-->[マクロ]-->
[マクロ])で「SortSheets」を指定し、[実行]ボタンを押します。
これでソート出来たと思いますが、如何でしょうか。
Sub SortSheets()
Dim Wwh As Worksheet
Dim N As Integer
Const UpDown = 2 ' <---- 1=昇順 / 2=降順 を指定
Const Kyutso = "Sheet" ' <----- 共通名称(小/大文字を識別) 無しは""のみ
Application.ScreenUpdating = False
Sheets.Add Before:=Worksheets(1)
Set Wwh = ActiveSheet
With Wwh
.Visible = False
For N = 2 To Worksheets.Count
.Cells(N - 1, 1).Value = Worksheets(N).Name
If Kyutso <> "" Then
.Cells(N - 1, 2).Value = _
Replace(.Cells(N - 1, 1).Value, Kyutso, "")
End If
.Cells(N - 1, 2).Value = _
Application.GetPhonetic(.Cells(N - 1, 2).Value)
Next N
If UpDown <> 2 Then
.Range("A1").CurrentRegion.Sort Key1:=.Range("B1"), _
Order1:=xlAscending, Header:=xlNo, OrderCustom:=1
Else
.Range("A1").CurrentRegion.Sort Key1:=.Range("B1"), _
Order1:=xlDescending, Header:=xlNo, OrderCustom:=1
End If
For N = 1 To .Range("A1").End(xlDown).Row
Worksheets(.Cells(N, 1).Text).Move After:=Sheets(N)
Next N
End With
For N = 2 To Worksheets.Count
If Worksheets(N).Visible = xlSheetVisible Then
Worksheets(N).Activate
Exit For
End If
Next N
Application.DisplayAlerts = False
Wwh.Delete
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Set Wwh = Nothing
End Sub
この回答への補足
ありがとうございます。
"Sheet"を""として、実行してみたのですが、
実行時エラー '1004':
並べ替えの参照が正しくありません。並べ替えるデータ内にあることと、[最優先されるキー]ボックスが空白でないことを確認してください。
と表示されます。
デバックを押すと
.Range("A1").CurrentRegion.Sort Key1:=.Range("B1"), _
Order1:=xlDescending, Header:=xlNo, OrderCustom:=1
この部分が黄色くなっています。
そこで、
>Const Kyutso = "Sheet" ' <----- 共通名称(小/大文字を識別) 無しは""のみ
この"Sheet"を" "としたところ、実行はされるのですが、昇順でも降順でもなく、私には、規則がわからない順に並んでいます。
ちなみに、今回試したファイルは、1122,1129,1128,1126,1125,1123,1120,1172R1,1172,1171R1のように並んでいます。
このファイルは、1000~1200+所々に1172R1,1172R3などが入っています。
私の何が悪いのでしょうか?
No.1
- 回答日時:
5つぐらいでテストではOKですが、あまり自信はありません。
本番のブックのコピーを取って、慎重にテストして見てください。(1)ブック内のシート名をSheet1のA列に出します。
Sub test02()
' MsgBox Sheets.Count
For i = 1 To Sheets.Count
Worksheets("sheet1").Cells(i, 1) = Sheets(i).Name
Next i
End Sub
余分なシートを1つ挿入して、その名前をWorksheets("sheet1").のSheet1と置換えてください。
そして実行(F5)する。
(2)手動ソート
Sheet1のA列範囲指定して、データ-並べ替え-A列-降順で並べ替えます。
ここ(2)はあえて、VBAにしていません。(VBAにも簡単に出来ますが。)
(3)シートのタブ位置の並べ替え
下記を実行する。
Sub test03()
For i = 1 To Sheets.Count - 1
s1 = Worksheets("sheet1").Cells(i, "A")
s2 = Worksheets("sheet1").Cells(i + 1,"A")
Application.Worksheets(s2).Move , ActiveWorkbook.Worksheets(s1)
Next i
End Sub
(Moveのあと1スペースのあとカンマをもらさないように。)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルブックの全シートの非表示列を再表示したい 1 2022/12/24 20:48
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルのオートフィルターのしぼりをクリアーしたい 2 2022/12/24 08:36
- その他(Microsoft Office) エクセルで串刺ししたシートの並べ替えをしたいです 4 2023/02/14 11:59
- Google Drive Googleスプレッドシートについて質問です。 今作っているデータで、 シート1→ベタ打ちでひたすら 2 2022/05/18 14:27
- Excel(エクセル) 複数のブックをひとつのブック(複数のシートにまとめる)場合にシートとの順番について 5 2022/12/28 20:47
- 建設業・製造業 見積作成(エクセル)について教えて下さい。 2 2023/05/10 13:47
- Excel(エクセル) エクセルのフッタやヘッダーについて 3 2023/02/04 09:45
- Excel(エクセル) エクセルでファイル保存時に複数シートのオートフィルタを全て解除したい 1 2023/05/10 13:23
- Excel(エクセル) vba シートの並び替え 1 2023/04/19 13:44
- Excel(エクセル) エクセルのマクロで複数シートを両面印刷するには? 2 2022/12/08 23:23
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【ExcelVBA】sheet作成時にマク...
-
VBA シートの切り替えができな...
-
エクセル/マクロ Exit Subが実...
-
マクロ実行ボタンがコピー出来ない
-
VBAでシートコピー後、シート名...
-
不明なコマンドです("FROM")。...
-
オペランドが足りませんとコメ...
-
VBAで横データを縦データに変換...
-
Excel2010でふりがなが漢字にな...
-
WordPressをインストールしてい...
-
JWWでDXFファイルを開きたい
-
Access2010 「演算子がありませ...
-
貼り付けをマクロで禁止させたい。
-
ザウルスのLinuxでSEDのスクリ...
-
OBSが起動できません
-
(int)キャストとintvalの違い
-
エクセル DBから該当データを...
-
GhostからWin XPがインストール...
-
エクセルVBAで参照設定というフ...
-
『PHP』 MAMPで$_SERVER["REMOT...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【ExcelVBA】sheet作成時にマク...
-
エクセル/マクロ Exit Subが実...
-
VBA シートの切り替えができな...
-
エクセル 「実行時エラー"13":...
-
マクロ実行ボタンがコピー出来ない
-
VBAでシートコピー後、シート名...
-
エクセル 複数シートのフィル...
-
シートの表示が消えて整列をし...
-
フェイス・シートについて教え...
-
エクセルのワークシートの並べ替え
-
Excelユーザーフォームでシート...
-
Excel2000でシート上にボタンを...
-
【エクセル】複数の文字を同時...
-
アクセス97での罫線について
-
エクセルのシートを自動でコピー
-
ワークシート上に配置したコマ...
-
不明なコマンドです("FROM")。...
-
Access2010 「演算子がありませ...
-
WordPressをインストールしてい...
-
オペランドが足りませんとコメ...
おすすめ情報