• ベストアンサー

エクセルVBAでシートの並び替え

エクセル2000です。 バラバラの名前をもつ30枚ほどのシートの順番を、並び替えたいのです。 並び順は新たに挿入したsheets("目次")のB2からB32に記載の名前の順です。 シートを並び替えるマクロは思いつきません。 よろしくお願いします。

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

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 こんな感じ Sub Macro1()   Dim i As Long   For i = 2 To 32     Sheets(Sheets("目次").Cells(i, 2).Value).Move After:=Sheets(i - 1)   Next i End Sub なお、セルのシート名と実際のシート名が違う場合のエラー処理を付け加えておいて下さい。

AQUALINE
質問者

お礼

さっそくありがとうございました。 うまく出来ました。 助かりました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

目次のシートを一番右に持ってきておく。 B2からB32まで31枚+目次一枚=34枚として Sub test01() N = ActiveWorkbook.Worksheets.Count na = Worksheets("sheet7").Cells(2, "B") Sheets(na).Move before:=Sheets(1) For i = 3 To N - 1 na = Worksheets("sheet7").Cells(i, "B") Sheets(na).Move after:=Sheets(i - 1) Next i End Sub

AQUALINE
質問者

お礼

ありがとうございました。 皆様のお教えをもとに下記のようなVBAがしあがりました。 目次と各ページの間にリンクも貼れました。 ありがとうございました。 Sub シート並べ替えとリンク() Dim i As Long With Sheets("目次") .Hyperlinks.Delete .Move before:=Sheets(1) For i = 2 To .Cells(.Rows.Count, 2).End(xlUp).Row Set ws = Sheets(.Cells(i, 2).Value) ws.Move after:=Sheets(i - 1) On Error GoTo MSG ws.Cells(1, 1).Value = "目次" ws.Hyperlinks.Add Anchor:=ws.Cells(1, 1), Address:="", SubAddress:=Sheets(1).Name & "!A1" .Hyperlinks.Add Anchor:=.Cells(i, 2), Address:="", SubAddress:=Sheets(i).Name & "!A1" Next i .Activate Exit Sub MSG: MsgBox .Cells(i, 2).Value & "シートが見当たりません。" End With End Sub

全文を見る
すると、全ての回答が全文表示されます。
  • jindon
  • ベストアンサー率43% (50/116)
回答No.2

こんなのもあります。 目次シートを最初に持ってきて、後ろに並べ替えます。 Sub Sheet_Sort() Dim i As Integer, ws As Worksheet, wsI As Worksheet Set wsI = Sheets("目次") For i = wsI.Range("B65536").End(xlUp).Row To 2 Step -1 Sheets(wsI.Range("B" & i).Value).Move after:=wsI Next Sheets(1).Select Set wsI = Nothing End Sub

AQUALINE
質問者

お礼

ありがとうございました。 なるほど、最後から順にやるやり方ですね、これは勉強になりました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Excelシート並び替え

    目次とフォーマットの名前以外のシートを それらの各シートA2セルの名前順に並び替えたいです。 VBAを教えてください。

  • シートが文字列で並び替えられて困っています。

    エクセル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をよろしければ教えて頂けませんでしょうか。 よろしくお願いいたします。

  • エクセルシートの並び替え

    VBAでシートの並び替えについて。 下記例の様に、セルA1:A50に書き込まれた順に、シートの並び替えを、上から順番にシートの最後尾に移動させるには、どのようにすれば良いですか?よろしくお願いします。 例 ○テーブル名:List ーーーA 1|にんじん 2|ピーマン 3|大根 4|・・・ 5|・・・ ○現在の並び順 List/ピーマン/・・/にんじん/・・・/・・/・/・・/大根 ○希望する並び順 List/にんじん/ピーマン/大根/・・・/・・・/・・・ 参考にしたURLは下記のとおりです。 http://www.relief.jp/itnote/archives/001300.php http://akubizzz.hp.infoseek.co.jp/sub169.html

  • エクセルのVBAマクロで隠れシートを表示させる方法について教えて下さい

    エクセルのVBAマクロで隠れシートを表示させる方法について教えて下さい。 エクセルで”書式→シート→表示しない”を実行するとエクセルのシートを非表示にすることが出来ます。 逆に”書式→シート→表示する”にすると隠れているシートが表示出来ます。 この非表示のシートを表示させるVBAマクロの記載を教えて下さい。 但し、”Sheets(シート名).Visible = True”の様にシート名を記載すれば非表示のシートが表示されるのは知っています。今回知りたいのは、シート名の分からない全ての非表示のシートを表示させるVBAマクロの記載方法を教えて下さい。

  • エクセルVBAでシートの並べ替え

    シートAと、Aを参照しているシートBのセットを複数枚複製するVBAです。これはこれでちゃんと作動し、複製されたB(n)はA(n)を正しく参照しています。 For n = 1 To X'(Xは変数です。) Sheets(Array("A", "B")).Copy after:=Sheets(Sheets.Count) Next 質問は、このマクロで生成されたシートの並び替え方法です。現状ではA,B,A(2),B(2)~A(n),B(n)ですが、これをA, A(2)~A(n)、B,B(2)~B(n)というようにそれぞれ順番に並べたいのです。どうすればよいのでしょうか?

  • Excel(エクセル)で非表示シートをVBAで計算するには?

    よろしくお願いします。 エクセルで1つのブックにAシート~Fシートまであるとします。 再計算させると、すべてのシートを再計算してしまうため時間がかかるので、マクロの自動記録を利用して「Aシート→Bシート→Cシート→Dシート→Eシート」と、必要なシートだけを順番に計算させる事で、処理時間短縮をさせる事をする事ができました。 EシートとFシートは表示させておいて、その他のA~Dシートは非表示にしました。 Eシートには、A~Dシートで計算した結果が表示されるようになっています。 ですが、A~Dシートを非表示にして作成したマクロを実行すると、エラーが出てしまい上手くできません。 A~Dシートを非表示にしていても、ブック全体を再計算させる事はできます。 非表示にしたシートをマクロで計算させるには、どのようにしたら良いでしょか? アドバイスをお願い致します。 登録したマクロは下記のようになっています。 Sub 計算() Sheets("Aシート").Select ActiveWorkbook.PrecisionAsDisplayed = False ActiveSheet.Calculate Sheets("Bシート").Select ActiveWorkbook.PrecisionAsDisplayed = False ActiveSheet.Calculate Sheets("Cシート").Select ActiveWorkbook.PrecisionAsDisplayed = False ActiveSheet.Calculate Sheets("Dシート").Select ActiveWorkbook.PrecisionAsDisplayed = False ActiveSheet.Calculate Sheets("Eシート").Select ActiveWorkbook.PrecisionAsDisplayed = False ActiveSheet.Calculate Sheets("Eシート").Select End Sub

  • VBA シートのコピー

    シートをコピーし、挿入をシートの末尾にする場合はどうなりますか? マクロを使ってやったときに、20のシートがあったため、下記のようになりますが、これだと、2回目以降にコピーしたとき20番目に挿入されて末尾には移動しないですよね。 そこは、どうしたらいいですか?? シート名「あああ」 Sheets("あああ").Copy After:=Sheets(20) お願いします。

  • ExcelのVBAでシートのコピー

    Excel2000 Win2000 複数(最低5)のシートが存在するExcelのBookでExcelのVBAを使用して strSheetName="XXX1" intSheetNo = 1 Sheets(strSheetName).Copy after:=Sheets(intSheetNo) とシートのコピーをしています。 この時コピーされたシートのインデックスが2にならないんですが、何故なんでしょ? やりたい事はコピーしたシートの名前をExcelが勝手につけた名前から変更したいんです。 コピーされたシートのインデックスが2になると思っていたので上手く行きません。 Sheets(intSheetNo + 1).Name = "XXX1-1"

  • エクセル VBA シートの選択 

    windows XP でエクセル2000を使っています。 Sub aaa() Sheets("Sheet1").Select Dim a As String a = Cells(2, 4) Sheets(a).Select Range("A1").Select End Sub というマクロだと セルに入っている値のシート名を探してくれます。 ですが Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) If Intersect(Target, Range("B11:b683")) Is Nothing Then Exit Sub Worksheets("Sheet1").Range("C2").Value = Target.Value Dim b As String b = Range("C2).value (←ここをcellsにしてもダメ) Sheets(b).Select Range("A1").Select End Sub これだとsheets(b)を選びません。Sheets(b).Selectのところが黄色くなります。 何処が間違えているのでしょうか。 全くの素人ですが、仕事で必要に迫られています。 わかりやすく回答・解説くれると助かります。

  • マクロでエクセルシートのコピー

    マクロでシート1を最後尾に名前をつけてコピーしたいと思ってます。 つけたい名前は、シート2のあるセルにかいてあります。 私は下記のように書いたのですが、エラーになってしまいます。 Worksheets("Sheet2").Select newsheet = Cells(1, 1) Sheets("Sheet1").Select Sheets("Sheet1").Copy After:=Sheets(newsheet) どのようにすればシートをシート名をつけてコピーできますか? 教えてください。 エクセル97です。

専門家に質問してみよう