- ベストアンサー
Excelシートの移動について
いつもお世話になります。Excel2000を勉強中の初心者です。 ひとつのブックにワークシートが100枚くらいあります。 各シートに担当者の名前をつけています(例、山田、鈴木、田中、佐藤、安部...)。しかし、sheet1から新規シートを作成するたびに、担当者の名前をランダムにシート名としてつけていたため、ブック内のシートの順番がバラバラの状態です。これらのシートをあいうえお順になるようにブック内でシートの移動をしたいのですが、シート枚数が多いので、一つずつ移動していくのは大変な作業になりそうです。 なにか、一発であいうえお順にシートを移動することができる方法はないでしょうか? よろしくお願いします。
- haasan99
- お礼率84% (257/304)
- オフィス系ソフト
- 回答数6
- ありがとう数3
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
> エラーの原因について教えていただけませんでしょうか? 数字だけを使ったシート名がありませんでしょうか。 急ぎましたので、その他にも検証が、足りなかったようです。 今度のは、「数字だけの名前」と「非表示シート」にも対応しましたので、 大丈夫だと思います。 ( 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)
NO1のosuosuです。 横から失礼します。 haasan99さんの目的は「あいうえお順」ですよね。 掲載されているVBAコードは「漢字コード順」になっています。 つまり、漢字の音読みによって並べ替わるものです。 正確なあいうえお順にはなりません。 質問の趣旨と異なるもので、いくらエラーをなおしても、お望みの並べ替えはできません。 初心者ということですので、お気づきになっていなかったら時間の無駄になってしまい、かわいそう・・・と思い意見させていただきます。 余計なお世話だったらごめんなさい。
- ja7awu
- ベストアンサー率62% (292/464)
ちょっとコードを整理しました。 こちらでテストしてみてください。 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
お礼
何度も回答していただきまして、本当にありがとうございました。私の説明不足でしたが、ご指摘のとおり、シート名が数字だけのものも含まれておりました。不十分な説明でかえってお手間取らせてすみませんでした。おかげさまで、#4の方法で希望どおりにできました。心よりお礼申し上げます。1000ポイントくらい差し上げたいのですが、そうもいかないので、気持ちだけもお送りします。ja7awuさん目指してもっと勉強しますです。ありがとうございました。m(__)m
- ja7awu
- ベストアンサー率62% (292/464)
シートの種類は、「ワークシート」だけですか。 「グラフ」や「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)
シート名を「漢字読み順」で並べ替えるものとし、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
補足
ご丁寧な回答まことにありがとうございます。 ご指示どおりにやってみたのですが、次のエラーとなります。「実行時エラー'9'インデックスが有効範囲にありません。」 それで、デバッグを見たところ、次の行が黄色表示になっておりました。 Worksheets(Wwh.Cells(N, 1).Value).Move after:=Sheets(N) 度々恐れ入りますが、エラーの原因について教えていただけませんでしょうか?
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の名前を入れていきたいのですが,田中,佐藤の分を抜いた上で番号の若い順に選んできたいのです。 どのような関数をどのように使えば成功するでしょうか。
- ベストアンサー
- その他MS Office製品
- excel 重複したデータのコピー
例えばこんなデータがあるとします。 名前 値 鈴木 1 佐藤 2 佐藤 5 小林 2 田中 3 田中 1 田中 2 斉藤 0 山田 4 山田 2 というデータから 佐藤 2 佐藤 5 田中 3 田中 1 田中 2 山田 4 山田 2 という感じで名前が2つ以上あるデータだけ抽出・コピーをしたいのですが、 どういう風にすれば出来るでしょうか。
- 締切済み
- その他MS Office製品
- 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 とデータが入っています。 受付を確認したお客様の横一列のデータ 「担当・お客様名・同行者・予定日・備考」を全て 「受付」ボタンを押すと <受付済み>シートへ移したいと思っています。 例:佐藤さんの受付をしたら佐藤さんの所を指定して ボタンを押すと横一列のデータを<受付済み>シートへ移動させる。 というマクロを作りたいです。 全くの初心者で全くわかりません。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- エクセルで条件に一致する複数の列を取得するには
下のような「得点」という名前のシートがあります。 (「田中」のセルがA1です。) [ 田中 ][ 10 ] [ 山田 ][ 21 ] [ 佐藤 ][ 76 ] [ 鈴木 ][ 53 ] 別の「組」シートで、以下のようになっています。 [ A ][ 田中 ] [ A ][ 佐藤 ] [ B ][ 山田 ] [ C ][ 鈴木 ] ここで、「組」シートのどこか空いているセル(例えばF1)に、 「Aの組の点数の合計値」を表示したいと思っています。 考えた方法としては、 1.まず「組」シートのA1からD1を順番に見て、 2.値が「A」になっている場合のみ、そのひとつ右の名前を取得して、 3.「得点」シートで、取得した名前を探し、その点数を取得し、 4.それを全て足す という感じなのですが、どういう式を書けば良いのか分かりません。 度々すみませんが、よろしくおねがい致します。
- ベストアンサー
- その他MS Office製品
- エクセルで条件に一致したセルの隣のセルを取得したい
下のような「得点」という名前のシートがあります。 (「田中」のセルがA1です。) [ 田中 ][ 10 ][ 200 ] [ 山田 ][ 21 ][ 150 ] [ 佐藤 ][ 76 ][ 250 ] [ 鈴木 ][ 53 ][ 350 ] 別のシートのA1セルに、「佐藤」と入力すると、 [ 佐藤 ] 「得点」シートから「佐藤」の列を見つけて、B1、C1に [ 佐藤 ][ 76 ][ 250 ] のように表示させたいのですが、B1、C1にはどのような式を書けば良いのでしょうか。 「得点」シートでは氏名が重複する事はありません。 IF文を使うと思うのですが、いまいち良く分かりませんでした。 よろしくおねがい致します。
- ベストアンサー
- その他MS Office製品
- エクセルにて「期間指定」で「データ集計」する方法
エクセルで営業商談用顧客管理を行っています。 シート1には、商談日を下記のように記載しており A列 B列 日付 担当 1/1 山田 1/6 田中 1/8 佐藤 2/3 山田 2/4 山田 2/6 佐藤 2/9 田中 3/1 佐藤 3/2 山田 3/5 佐藤 別シートにて、例えば1月にどの担当が何件商談をしたか、を 下記のように管理したいのですが 山田 ○件 田中 ○件 佐藤 ○件 こちらの関数の指定方法について、ご教授いただけないでしょうか? よろしくお願いします
- 締切済み
- マーケティング・企画
お礼
アドバイスありがとうございました。 シートの名前を若干手直しして対応いたしました。 ご親切にありがとうございました。_(._.)_