- ベストアンサー
EXCELシートの整列
EXCELで、各シートに名前を付けて使っています。ひとつのファイルに膨大な数のシートが入っているので、分かりやすく操作できるようにシートを整列したいのですが、どうすれば良いでしょうか。 たとえば、シート名を「あいうえお」順で左から自動的に整列させたいと思っています。 EXCELでそういう操作は可能なんでしょうか? よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
シート1を作業用シートとして使います。 漢字が含まれていたら読みの順番には並び替えてくれません。 なお、このマクロは私が作ったものではなく、他サイトで回答 されていたものを勉強のため保存していたものです。 Sub test() Dim WS As Worksheet Dim i As Integer Dim MyC As Range Set WS = Worksheets.Add(After:=Worksheets(Worksheets.Count)) With WS For i = 1 To Worksheets.Count - 1 .Cells(i, 1).Value = Worksheets(i).Name Next With .Range("A1").CurrentRegion .Sort Key1:=.Parent.Range("A1"), Order1:=xlAscending, Header:=xlNo For Each MyC In .Cells Worksheets(MyC.Value).Move After:=Worksheets(Worksheets.Count) Next End With Application.DisplayAlerts = False .Delete Application.DisplayAlerts = True End With End Sub
その他の回答 (3)
- T0ngT0ng
- ベストアンサー率40% (8/20)
直接の回答ではないのですが、 わかりやすく操作したい、というだけでしたら、先頭に一枚、目次でも入れてみたらいかがでしょうか? やっぱりマクロを使うのですが、以下のマクロで、一枚目以外のシートへのリンクを作成できます。 後は #3さんの書いてるように、好きな並び順にしてしまえば比較的使いやすいのではないかと思います。 -- Sub MakeIndex() For i = 1 To Worksheets.Count - 1 ActiveSheet.Hyperlinks.Add Anchor:= _ ActiveCell.Cells(i, 1), _ Address:="", _ SubAddress:=Worksheets(i + 1).Name & "!A1", _ TextToDisplay:=Worksheets(i + 1).Name Next End Sub
お礼
回答ありがとうございました。マクロ…。使った事が無いんですよね。。。また別の整理方法を考えてみます。どうもありがとうございました。
補足
申し訳ありませんが、マクロの良し悪しが判断できないので、回答ポイントは先着で付けました。皆様ありがとうございました。
- imogasi
- ベストアンサー率27% (4737/17069)
Sub test02() Dim sh As Worksheet i = 1 For Each sh In ActiveWorkbook.Worksheets Worksheets("sheet4").Cells(i, "A") = sh.Name i = i + 1 Next End Sub 1つシートを追加します。その名前を上記ではSheet4としてます。 上記でSheet4のA列に、シート名の一覧が出ます。 ソートをプログラムで行うのは面倒なので、エクセルを利用して、Sheet4のA列を昇順にソートしてください。もし漢字名、」英字名で並び順が気に食わない場合は B列に振り仮名等を振って、B列でソートしてください。(膨大な数とのことですが、振り仮名を振るのはできるかな。) それに対して Sub test03() m = Worksheets("sheet4").Cells(1, "A") For i = 2 To 4 n = Worksheets("sheet4").Cells(i, "A") Worksheets(n).Move , Worksheets(m) m = n Next i End Sub を実行します。 しぇえt4のA列のA列のシート名の順にシートタブを並べます。2つに分け、ソートを手作業にすることにより、少しVBAコードは簡単になったでしょう。
お礼
ありがとうございました。ちょっと私レベルでは操作し切れない感じです。残念。本当にありがとうございました。
- komet163
- ベストアンサー率51% (22/43)
こんにちは。多分マクロを使わないとダメかと思います。 私は、(1)、(2)、(3)‥(10)‥(20)‥ とシート名を付ける習慣がありまして、 下記のように、シート名を文字扱いし、文字数も比較して、 (1)、(10)、(2)、(20)、(3)‥とならないようにしてます。 Dim r As Long Dim shtTemp As Worksheet With Application .ScreenUpdating = False .DisplayAlerts = False End With Set shtTemp = Worksheets.Add(Before:=Worksheets(1)) With shtTemp For r = 1 To Worksheets.Count .Cells(r, 1) = "'" & Worksheets(r).Name .Cells(r, 2) = Len(Worksheets(r).Name) Next .Cells(1, 1).Sort _ Key1:=.Columns(2), Order1:=xlDescending, _ Key2:=.Columns(1), Order2:=xlDescending, _ Header:=xlYes For r = 2 To .Cells(1, 1).CurrentRegion.Rows.Count Worksheets(CStr(.Cells(r, 1))).Move Before:=Worksheets(1) Next .Delete End With
お礼
ECXELの単純操作で整列できるのかな?と思っていたのですが、残念。マクロは全く手が出せないので、また別の整理方法を考えてみます。
お礼
マクロが必要なんですか…。残念。マクロを使った経験が無いもので、難しそうですね。ご紹介ありがとうございました。