• ベストアンサー

Excelシートの移動について

いつもお世話になります。Excel2000を勉強中の初心者です。 ひとつのブックにワークシートが100枚くらいあります。 各シートに担当者の名前をつけています(例、山田、鈴木、田中、佐藤、安部...)。しかし、sheet1から新規シートを作成するたびに、担当者の名前をランダムにシート名としてつけていたため、ブック内のシートの順番がバラバラの状態です。これらのシートをあいうえお順になるようにブック内でシートの移動をしたいのですが、シート枚数が多いので、一つずつ移動していくのは大変な作業になりそうです。 なにか、一発であいうえお順にシートを移動することができる方法はないでしょうか? よろしくお願いします。

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

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

> エラーの原因について教えていただけませんでしょうか? 数字だけを使ったシート名がありませんでしょうか。 急ぎましたので、その他にも検証が、足りなかったようです。 今度のは、「数字だけの名前」と「非表示シート」にも対応しましたので、 大丈夫だと思います。 ( No.3 は、無視してください。) Sub SortSheets() Dim Wwh As Worksheet Dim N As Integer Application.ScreenUpdating = False Sheets.Add Before:=Worksheets(1) Set Wwh = ActiveSheet For N = 2 To Worksheets.Count   Cells(N - 1, 1).Value = Worksheets(N).Name   Cells(N - 1, 2).Value = _   Application.GetPhonetic(Worksheets(N).Name) Next N Range("A1").CurrentRegion.Sort Key1:=Range("B1"), _   Order1:=xlAscending, Header:=xlNo, OrderCustom:=1 '昇順 'Range("A1").CurrentRegion.Sort Key1:=Range("B1"), _   Order1:=xlDescending, Header:=xlNo, OrderCustom:=1 '降順 For N = 1 To Range("A1").End(xlDown).Row   Worksheets(CStr(Wwh.Cells(N, 1).Value)).Move After:=Sheets(N) Next N 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

その他の回答 (5)

noname#64217
noname#64217
回答No.6

NO1のosuosuです。 横から失礼します。 haasan99さんの目的は「あいうえお順」ですよね。 掲載されているVBAコードは「漢字コード順」になっています。 つまり、漢字の音読みによって並べ替わるものです。 正確なあいうえお順にはなりません。 質問の趣旨と異なるもので、いくらエラーをなおしても、お望みの並べ替えはできません。 初心者ということですので、お気づきになっていなかったら時間の無駄になってしまい、かわいそう・・・と思い意見させていただきます。 余計なお世話だったらごめんなさい。

haasan99
質問者

お礼

アドバイスありがとうございました。 シートの名前を若干手直しして対応いたしました。 ご親切にありがとうございました。_(._.)_

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

ちょっとコードを整理しました。 こちらでテストしてみてください。 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 = _     Application.GetPhonetic(Worksheets(N).Name)   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  

haasan99
質問者

お礼

何度も回答していただきまして、本当にありがとうございました。私の説明不足でしたが、ご指摘のとおり、シート名が数字だけのものも含まれておりました。不十分な説明でかえってお手間取らせてすみませんでした。おかげさまで、#4の方法で希望どおりにできました。心よりお礼申し上げます。1000ポイントくらい差し上げたいのですが、そうもいかないので、気持ちだけもお送りします。ja7awuさん目指してもっと勉強しますです。ありがとうございました。m(__)m

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

シートの種類は、「ワークシート」だけですか。 「グラフ」や「MS Excel5.0ダイアログ」は含んでいませんよね。 それにしても、ちょっと考えにくいのですが・・・ もう一度やってみて、ダメなら次のコードでやってみてください。 もし、エラーになりましたら、黄色い行の N にカーソルを当てると 数値が表示されますので N > Sheet数 になっていないか確認してください。 Sub SortSheets() Dim Wwh As Worksheet Dim N As Integer Application.ScreenUpdating = False Sheets.Add before:=Worksheets(1) Set Wwh = ActiveSheet ActiveWindow.SelectedSheets.Visible = False With Wwh   For N = 2 To Worksheets.Count     .Cells(N - 1, 1).Value = Worksheets(N).Name     .Cells(N - 1, 2).Value = _     Application.GetPhonetic(Worksheets(N).Name)   Next N   .Range("A1").CurrentRegion.Sort Key1:=.Range("B1"), _   Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1 '昇順 '  .Range("A1").CurrentRegion.Sort Key1:=.Range("B1"), _   Order1:=xlDescending, Header:=xlGuess, OrderCustom:=1 '降順   For N = 1 To .Range("A1").End(xlDown).Row     Worksheets(.Cells(N, 1).Value).Move after:=Worksheets(N)   Next N End With Worksheets(2).Select Application.DisplayAlerts = False Worksheets(1).Delete Application.DisplayAlerts = True Application.ScreenUpdating = True Set Wwh = Nothing End Sub  

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

シート名を「漢字読み順」で並べ替えるものとし、MS-IMEを使用している ものとします。 一応、ご存知かも知れませんが、VBAの設定方法を書いておきます。 1.Alt + F11 で VBE(Visual Basic Editor)を開きます。 2.VBE のメニューから[挿入] -->[標準モジュール] を指定します。 3.モジュールウィンドウに下記コードをコピーして貼り付けます。 4.Alt + Q (または、右上隅の×)でウィンドウを閉じ、シートに戻ります。 5.実行するときは、Alt + F8 (メニューから[ツール]-->[マクロ]-->   [マクロ])で「SortSheets」を指定し、[実行]ボタンを押します。 Sub SortSheets() Dim Wwh As Worksheet Dim N As Integer Application.ScreenUpdating = False Sheets.Add before:=Worksheets(1) ActiveWindow.SelectedSheets.Visible = False Set Wwh = ActiveSheet For N = 2 To Worksheets.Count   Cells(N - 1, 1).Value = Worksheets(N).Name   Cells(N - 1, 2).Value = _   Application.GetPhonetic(Worksheets(N).Name) Next N Range("A1").CurrentRegion.Sort Key1:=Range("B1"), _   Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1 '昇順 'Range("A1").CurrentRegion.Sort Key1:=Range("B1"), _   Order1:=xlDescending, Header:=xlGuess, OrderCustom:=1 '降順 For N = 1 To Range("A1").End(xlDown).Row   Worksheets(Wwh.Cells(N, 1).Value).Move after:=Sheets(N) Next N Worksheets(2).Select Application.DisplayAlerts = False Worksheets(1).Delete Application.DisplayAlerts = True Application.ScreenUpdating = True Set Wwh = Nothing End Sub  

haasan99
質問者

補足

ご丁寧な回答まことにありがとうございます。 ご指示どおりにやってみたのですが、次のエラーとなります。「実行時エラー'9'インデックスが有効範囲にありません。」 それで、デバッグを見たところ、次の行が黄色表示になっておりました。 Worksheets(Wwh.Cells(N, 1).Value).Move after:=Sheets(N) 度々恐れ入りますが、エラーの原因について教えていただけませんでしょうか?

noname#64217
noname#64217
回答No.1

Excelにはシートを並べ替える標準機能はありません。 多分「VBAならできます」という回答が出てくると思いますが。。。 1枚ずつ移動するのがいいです。初心者ならなおさらです((+_+)) がんばってください!

関連するQ&A

  • 複数のシートのセル内容をひとつにまとめたい

    複数のシートのセル内容をひとつにまとめたいと思っています。 Sheet1        Sheet2      Sheet3 1 山田 ¥100  1 山田 ¥80  3 鈴木 ¥80 2 佐藤 ¥130  2 佐藤 ¥55  4 田中 ¥150 3 鈴木 ¥110  4 田中 ¥60 こんなデータを Sheet4 1 山田 2 佐藤 3 鈴木 4 田中 とまとめたいんです。 金額は必要ないので、番号と名前だけをまとめたいんです。 どうすれば良いか、教えてください。 よろしくお願いします。

  • エクセルで2つの条件を元に

    エクセル2007で名簿を作っています。 1ヶ月ごとにメンバーの順が変わります。 シート1(番号順に名簿を作りました)   A  B   C  1 1     山田 2 2     木村 3 3 副長 佐藤 4 4     鈴木 5 5 班長 田中 6 6     長田  シート2(こちらがメンバーに配る名簿です)   A   B  C   D 1 班長    1    3 2 田中    山田  鈴木 3 4 副長    2    4 5 佐藤    木村  長田 A2に田中,A5に佐藤を選んでくるのはvlookupで成功しました。 質問したいのは C列D列に上記の番号のようにシート1の名前を入れていきたいのですが,田中,佐藤の分を抜いた上で番号の若い順に選んできたいのです。 どのような関数をどのように使えば成功するでしょうか。  

  • excel 重複したデータのコピー

    例えばこんなデータがあるとします。 名前  値 鈴木  1 佐藤  2 佐藤  5 小林  2 田中  3 田中  1 田中  2 斉藤  0 山田  4 山田  2 というデータから 佐藤  2 佐藤  5 田中  3 田中  1 田中  2 山田  4 山田  2 という感じで名前が2つ以上あるデータだけ抽出・コピーをしたいのですが、 どういう風にすれば出来るでしょうか。

  • シートの合計

    よろしくお願いします。 エクセルでシート1~3迄あります。各シ-トのA列は名前、B列に数字が入っています。名前はA列のどの行にあるかわかりません。 同じ名前をシート4のA1に入力したらその名前の合計を出したい。  シート1    シート2   シート3       シート4   A   B    A   B   A    B     A    B 山田 10   木村  5  佐々木 18   木村  55  鈴木 20   田中 21  伊藤  33    ↑ 木村 50   山下 70  加藤  57  (入力する) 田中 15   高橋 90  佐藤  61 高橋 60   山田 10  鈴木  12             ・   ・   ・          

  • Excelの2つのシートのデータ-を。。。。。

    1つのシートには 鈴木さん  住所・・・・ 山田さん  住所・・・・ 田中さん  住所・・・・ というリストが3000人分ほど入っています 別のシートには 鈴木さん  りんご 鈴木さん  とまと 鈴木さん  みかん 山田さん  りんご 田中さん  いちご 田中さん  とまと 田中さん  りんご 田中さん  みかん と、言った感じで同じ人物が縦書きで複数回登場します 実際はフルネームなので別人が重なることはありません で、です。 別のシートでも1枚目のシートにでもいいのですが 鈴木さん  住所・・・   3 山田さん  住所・・・   1 田中さん  住所・・・   4 と、列に2枚目のシートでの登場回数を反映させたいのです。 なにせ3000件あまり、手作業ではなく、関数を使ってする方法はないでしょうか、、、 もう少し欲張ると             りんご とまと みかん いちご  鈴木さん 住所 3    1  1   1 山田さん 住所 1       1 田中さん 住所 4    1  1   1   1 ってな事は、できませんか。    

  • マクロ 別シートへ移動

    マクロ超初心者です。 <受付待ち>シートに  A      B       C      D     E  担当者 お客様名 同行者名 予定日  備考  ○○   鈴木           4/10  ■■   田中     田中子  4/10  ○○   佐藤           4/10  ○○   高橋           4/8 とデータが入っています。 受付を確認したお客様の横一列のデータ 「担当・お客様名・同行者・予定日・備考」を全て 「受付」ボタンを押すと <受付済み>シートへ移したいと思っています。 例:佐藤さんの受付をしたら佐藤さんの所を指定して ボタンを押すと横一列のデータを<受付済み>シートへ移動させる。 というマクロを作りたいです。 全くの初心者で全くわかりません。 よろしくお願いします。

  • エクセルについて

    こんばんは。 いつも質問ばかりでごめんなさい。 ちょっとお聞きしたいのですが下記のような表があるとします。 カードの方のみの名前と金額を別のセル(または別シート)に表示させたいのですがどのようにしたらよろしいのでしょうか? 日付 名前  現金  カード 2/5  田中  12000 2/5  佐藤  18000 2/5  鈴木       32000 2/5  木村  25000 2/5  山田       22000 ↓このようにしたいのですが。 カード決済 日付 名前  金額 2/5  鈴木  32000 2/5  山田  22000 お手数おかけしますがよろしくお願いいたします。

  • エクセルで条件に一致する複数の列を取得するには

    下のような「得点」という名前のシートがあります。 (「田中」のセルがA1です。)  [ 田中 ][ 10 ]  [ 山田 ][ 21 ]  [ 佐藤 ][ 76 ]  [ 鈴木 ][ 53 ] 別の「組」シートで、以下のようになっています。  [ A ][ 田中 ]  [ A ][ 佐藤 ]  [ B ][ 山田 ]  [ C ][ 鈴木 ] ここで、「組」シートのどこか空いているセル(例えばF1)に、 「Aの組の点数の合計値」を表示したいと思っています。 考えた方法としては、  1.まず「組」シートのA1からD1を順番に見て、  2.値が「A」になっている場合のみ、そのひとつ右の名前を取得して、  3.「得点」シートで、取得した名前を探し、その点数を取得し、  4.それを全て足す という感じなのですが、どういう式を書けば良いのか分かりません。 度々すみませんが、よろしくおねがい致します。

  • エクセルで条件に一致したセルの隣のセルを取得したい

    下のような「得点」という名前のシートがあります。 (「田中」のセルがA1です。)  [ 田中 ][ 10 ][ 200 ]  [ 山田 ][ 21 ][ 150 ]  [ 佐藤 ][ 76 ][ 250 ]  [ 鈴木 ][ 53 ][ 350 ] 別のシートのA1セルに、「佐藤」と入力すると、  [ 佐藤 ] 「得点」シートから「佐藤」の列を見つけて、B1、C1に  [ 佐藤 ][ 76 ][ 250 ] のように表示させたいのですが、B1、C1にはどのような式を書けば良いのでしょうか。 「得点」シートでは氏名が重複する事はありません。 IF文を使うと思うのですが、いまいち良く分かりませんでした。 よろしくおねがい致します。

  • エクセルにて「期間指定」で「データ集計」する方法

    エクセルで営業商談用顧客管理を行っています。 シート1には、商談日を下記のように記載しており A列 B列 日付 担当 1/1  山田 1/6  田中 1/8  佐藤 2/3  山田 2/4  山田 2/6  佐藤 2/9  田中 3/1  佐藤 3/2  山田 3/5  佐藤 別シートにて、例えば1月にどの担当が何件商談をしたか、を 下記のように管理したいのですが 山田 ○件 田中 ○件 佐藤 ○件 こちらの関数の指定方法について、ご教授いただけないでしょうか? よろしくお願いします

専門家に質問してみよう