• ベストアンサー

エクセルのワークシートの並べ替え

 エクセル2000を使っていますが、シートがsheet1~sheet**まで並んでいます。(そのファイルによって数は違いますが、シート名は必ずしも1~ではなく、また、必ずしも1つづつ増える数でもありません。どのファイルもシートは100以上あります) これを逆順に並べ替えたいのですが、どのようにすれば良いのでしょうか?多分、マクロを組めば良いのでしょうが。。。。。  ちなみに、全てのシートにデータが入っています。

  • dogs59
  • お礼率77% (279/359)

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

  • ベストアンサー
  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.4

> 必ずしも、今回の例のように、4桁プラスαということでもないのですが・・・ 前にも書きましたが、もし3桁があると200 は、1000 より後に(昇順時で) なりますよ。 文字列ですから・・・ シート名を付ける基準を書いていただければ、それなりにコーディング できるのですが、解らない部分は、推測するないですからね。 まぁ、使って見てください。 ごくろうさま。

dogs59
質問者

お礼

ありがとうございます。今のところ、これで十分です。また、わからなくなったら、新たに質問したいと思いますので、そのとき見つけたらよろしくお願いします。

その他の回答 (3)

  • ja7awu
  • ベストアンサー率62% (292/464)
回答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  

dogs59
質問者

お礼

 色々とありがとうございます。 >ですから、質問を見て番号を「数値」に変換する必要性を感じた訳です。 >どうもそうではなくて4桁プラスα のようなので「文字列」で処理しました。   必ずしも、今回の例のように、4桁プラスαということでもないのですが、4桁プラスαのものが一番多いですし、今回のVBAで試してみたいと思います。  今、いくつかのファイルを試したら、全てOKでした。ありがとうございました。  色々な方のVBAを参考にしながら、自分でもと思いますが、なかなか難しくて。本当にありがとうございました。

  • ja7awu
  • ベストアンサー率62% (292/464)
回答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  

dogs59
質問者

補足

 ありがとうございます。 "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などが入っています。  私の何が悪いのでしょうか?

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答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

  • エクセルで別ファイルのシートの貼り付けマクロ

    マクロ初心者です。よろしくお願いします。 excelファイルのシートに同じシート名csvファイルのデーターの貼り付けをしたいのです。 ↓詳しくは。 excelファイルがあります。(ファイル名:全社) シート名=集計、1、2、3、4、5、6、7、8、9、10(固定) csvファイルがあります。1~始まり数は変動(1~3だったり、1~7とか) 1ファイル=1シート、ファイル名とシート名は同じ excelファイルのシート(1~10)に、開いたcsvファイルの同じシート名(1~10)のデータを貼り付けたい。 毎回コピー・貼り付けの繰り返し作業なので、マクロ作成を試しているのですが、うまくいきません。 教えてください。お願いします。

  • 複数のエクセルファイルを1つのエクセルファイルのシートにコピーをマクロ

    複数のエクセルファイルを1つのエクセルファイルのシートにコピーをマクロで行いたい。 マイドキュメントのデーターというフォルダ内に エクセルファイルA(シート名みかん) エクセルファイルB(シート名りんご) エクセルファイルC(シート名バナナ) エクセルファイルD(シート名ぶどう) エクセルファイルE(シート名いちご) があります。 雛形は同じです。すべてA列~F列までデータが入っています。 行数はファイルによって違います。 また毎日自動で上書き更新され、毎日行数が変わります。 エクセルファイルZがあります。シートが7個あります。 ・変換 ・集計 ・みかん ・りんご ・バナナ ・ぶどう ・いちご エクセルファイルZを開きます。(各シートには昨日のデータが貼り付けてあります。) マイドキュメントのデーターフォルダも開いておきます。 エクセルファイルZにおいて「マクロの記録」を起動。 エクセルファイルZの 【みかん】~【いちご】までの5シートを全データDELETEします。 開いてあるフォルダ「データー」の中からエクセルファイルAを開きます。 (タスクバーにいます) ファイルAのシート【みかん】の全データ選択して エクセルファイルZの【みかん】というシートのA1セルにカーソルを あわせて貼り付けします。 開いてあるフォルダ「データー」の中からエクセルファイルBを開きます。 (タスクバーにいます) ファイルBのシート【りんご】の全データ選択して エクセルファイルZの【りんご】というシートのA1セルにカーソルを あわせて貼り付けします。 これと同じ操作を【バナナ】【ぶどう】【いちご】も行います。 エクセルファイルZにおいて「マクロの記録」を終了させます。 マクロができあがりました。 ファイルZを上書き保存して終了。再立ち上げで記録したマクロを実行。 エラーにはなりませんが、ファイルZの5種類各シートに ファイルA~Eのデータが貼りつきません。 何か無理な事をしているのでしょうか? もしかしてシート名が同じだと駄目?とためしにファイルZのシート名【みかん】~【いちご】を 【みかんZ】~【いちごZ】に変更してマクロを再記録しても 駄目でした。 よろしくお願いします。

  • エクセル・マクロ・・・シート名の取得等

    エクセル・マクロ・・・シート名の取得等 エクセルのマクロで質問です。 ほぼ初心者です。 社内データの処理をしたいと考えています。 マクロを組みたいエクセルブックの構成としては・・・ シート名一覧 集計シート 操作 という3つのシートがあり、 その後ろに各社員のデータシートがあります。 山田太郎 田中花子 ・ ・ ・ 部署により社員数が異なるためシートの4枚目以降は そのエクセルファイルによりシート数が異なります。 やりたいことは以下の2点です。 (1)シート名(社員名)の取得 シート名一覧に各シート名を一行ずつ入れて 一覧を作りたいです。 シート名取得&リスト化のマクロは大体わかりますが、 「シート名一覧」、「集計シート」、「操作」の3つのシート名は 一覧から外したく、どうしたらいいのかわかりません。 また、各シート名を取得した列の横の列に 各社員のシートにあるデータの一部(セルC5:C8)を 貼り付けたいです。 (2)集計シートに各社員のシートのD列の情報(D6:D43)を順に貼り付けていく。 シート名や数が固定されたものであれば何とかできそうなのですが、 不特定になるとどうしたらよいかさっぱりわかりません。 どなたかご教授お願いいたします。

  • EXCELのすべてのシートから特定セルの値だけを別のシートに書き出すには

    excelのマクロで別のEXCELファイルを選択して、たとえば、A3、E4、F10のセルの値だけをそのファイル内のシートすべて(シート数は変化)に対して別のEXCELファイルの1シートに各項目としてまとめて書き出すマクロを教えて下さい。 宜しくお願いします。

  • エクセル 全部のシートを自動的に読み込みたい

    どなたが助けてください。 エクセルのファイルが一つのフォルダの中に 沢山あります。(CSVの場合もあります) 各ファイルには複数のシートが入っていて シート名はバラバラです。 各シートのに入っているデータは 縦は500行目まで、横は端から端まで(A列→IV列)です。 この沢山のエクセルファイルの全シートを 一つのシートに自動的に読み込んで 縦てに並べたいのです。 1ファイルの中にある全シート(1枚しかシートがない ものもあれば5枚あるものもあり もれなく全部) の500行目までを 別の新しいエクセルファイルのシートに縦に並べて 次のファイルをまた開いて全シートを 先ほど並べたデータの下にまた並べて・・・・と 繰り返して一つのフォルダの中にあるエクセルファイルの全シート重複せずに並べるような マクロをどなたか教えて頂けないでしょうか? ファイル数が大変多く、本当に困っています。 よろしくお願いいたします。

  • EXCEL マクロの記録で並べ替えのマクロをつくるとそのシートでしか使えないのでしょうか?

    EXCEL マクロの記録で並べ替えのマクロをつくるとそのシートでしか使えないのでしょうか? EXCEL2007を使っています。 マクロの記録で並べ替えのマクロをつくるとそのシートでしか使えないのでしょうか? シート1 1 3 2 というデータを「マクロの記録」で昇順に並べ替えるマクロを作成します。 シート2 3 5 4 というデータに適用したいのですが、マクロを実行するとシート1のデータが 並べ替えられてしまいます。 マクロを読むと「シート1」という記述があるのでシート1にしか適用できないようです。 マクロの記録だけで別のシートにも適用できるマクロを作成できないでしょうか? (ただの並べ替えだけだったらマクロを作成する必要はないのですが、実際にはもっと複雑な 動作をさせたいのです)

  • Excel95のシート名の最大文字数に関して

    はじめまして、アクアと申します。 現在、Win98 + Excel95を使って簡単なマクロを作っています。 シートをコピーして、別CSVファイル中の文字列をコピーしたシート名に置き換えるという処理をしていますが、シート名が長い場合(例えば、ああああああああああいいいいいいいい)、 システムエラーコード:1005 エラーメッセージ:シート名が正しくありません と言う、エラーがでてしまい、シートを作成することができません。 Excel95には、シート名の最大文字数等の制約があるのでしょうか? ちなみに、上記マクロをExcel2000で実行した場合は何の問題も無くできました。 以上、よろしくご教授下さい。

  • エクセルで複数ファイルのシートから一つのシートへ結合したい

    エクセル上で、 Aフォルダ内にファイルBook1~数十個があり、Book1にはシート名「sh1」、Book2にはシート名「st2」のみがぞれぞれあります。シート内のデータ数はバラバラで何行のデータがあるか不明ですが、列数は同一です。 このファイルすべてを開かずに、今開いている、「加工.xls」のsheet1にまとめたいと思っています。(sh1の下にsh2、その下にsh3・・・を繰り返して、「加工.xls」のsheet1に貼り付ける。行間は空けず一覧表にする。フォルダ内のファイルが無くなったら終了する。)こんな感じのをマクロでやりたいと思っています。 ファイルを開かないで行う方法は、何とか過去の質問を調べてApplication.ExecuteExcel4Macroを使ってやろうとしていますが、応用が利きませんでした。開いていないファイルの最終行をどう取得選択してsheet1に持ってくればよいか分からず悩んでいます。 よろしくお願いいたします。

  • マクロのワークシート変換でエクセルシートを取込ました。テスト用のデータ

    マクロのワークシート変換でエクセルシートを取込ました。テスト用のデータが200件でそれは上手くいったのですが、次に件数を変更(200件から1件に減らしました)してマクロを走らせると、データ1件、空白199件の結果になりました。取込むファイル名は毎回同じですが、件数は可変します。この場合はどのように設定をすればいいのかお教えいただきたく思います。件数を増やした分にはそれは取り込んだのですが、減らした分がダメなようです。

  • エクセルのワークシートが重くなる!

    たまにエクセルで起きるのですが、 特定のワークシートが重くなる(キー、マウス操作の待ち時間が長い。RAMメモリ不足から来る重さの感覚に近い。)ことありませんか。 その原因、対処方法がわかる方はいないでしょうか。 そのワークシートの特徴、及び使用環境を以下に書きます。 (1)画面のスクロールが重くなる。 (キー、マウスどちらでも) (2)セル入力すると重くなる。(内容消去でも重くなる) (3)データ量は必ずしも大きくない。(1シートのみのファイルで数十キロでも起こる) (4)重いワークシートをシートコピーすると、そのコピー(Sheet(2))は必ず重くなる。 (5)重くないワークシートをシートコピーしても、そのコピー(Sheet(2))が重くなることがある(ほとんど起きないが過去数例あった)。 (6)新規の空のワークシートを作成し重いワークシートのデータを「全範囲コピー」し、新規ワークシートに「貼り付け」ると重くならない。 (7)マクロの有無によらない。 (8)外部参照ファイル(リンク)の有無によらない。  当社はウイルスバスターのコーポレートエディションを導入しインターネット経由でネットワーク内全てのパソコンのおいて随時パターンプログラムを更新していますので、コンピュータウイルスではないと推測しています。 たまにしかめぐり合わないので、(6)で対処しています。 以下に私の使用している環境を示しますが、他のPCでも同様に起こるので、どうもハードではなくファイルそのものに問題があるのでは思っています。 (環境) OS:Windows2000SP3 AP:EXCEL2002 CPU:CELERON 1.5G HDD:20G MEM:256M

専門家に質問してみよう