• 締切済み

「ワークシート見出しの順番」 を希望順に並び替えるマクロは ?

エクセル 2002 です。 シートの数は、必ず 36 以下です。 下記例は、 1、「 頭の AK 」 は 必ず、全部同じです。 2、「 数字部分の2桁 」 は、必ず、 1 ~ 10 です。 3、「 * 」 は、必ず、6 桁 です。 4、たとえば下記例の 「 AK01****** 」 は、 「 AK01******  だけの見出し全部 ( 01 だけが全く同じのデータが必ず続いてます) 」 を 「 01 の エリア  」 と 表現させて頂ます。    5、この エリア は 必ず、2つ か 3つ です。( 下記例では、エリア は 3つ です) この エリア順 を 「 InputBox を使い 」 希望順に並び替えたいのです。 何卒、ご教授くださいませ。 ----------------- Sub 見出し並び替え() Dim sort_key As String Dim sDataArray As Variant Dim i As Long Dim j As Long sort_key = InputBox("ソートキーを入力してください" & vbCrLf & "10,04,01 のような感じで入力してください") ・ ・ End Sub ---例---------------------------------------------- ブック1( エリア順が 01、04、10 です ) シート見出し AK01****** AK01****** ・・ AK01****** AK04****** ・・ AK04****** AK10****** ・・ AK10****** ブック1( エリア順を 10、04、01 にしたいです ) シート見出し AK10****** AK10****** ・・ AK10****** AK04****** ・・ AK04****** AK01****** ・・ AK01******

みんなの回答

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

エクセルのソートはあくまで、セルの値によるソートです。シート名は、セルの値ではないので、並べるとすると (1)セルにシート名を中間作業として書き込み、エクセルのソートメソッドを使う (2)またはソートのアルゴリズムを使って、配列にでも入れた、シート名を並べ替える。 ことになるでしょう。 さて(2)のソートアルゴリズムはわかりますか。知らなければ本でも、WEBでも「ソート アルゴリズム}で照会してください。 ーーー さてソートするとき、シート名のままソートしても、質問者の希望に合わないわけで、そこで、修正シート名をプログラムで作らないとなりません。 これは、机上ででもできるはず。文字列の、切った張ったの世界です。 それは質問者が考えて見るべきです。ややこしい説明をせずに。 10をA、04をB、01をCとか 10を1、04を2、01を3とか 必ずその順になる文字列に置き換えた文字列を作ればよい。 そしてシート名と、修正シート名は、ソートするとき、対で動かすこと。 ーーー その後、ソート後のシート名で、シートの移動のマクロで、シートを並べ替える(その順番にする)。 http://t_shun.at.infoseek.co.jp/My_Page/Excel-VBA/vba_page2.htm#シートの移動・複写

oshietecho-dai
質問者

お礼

ご回答、誠に有難うございました。 自身なりに、いろいろ考えてて、お礼が遅くなりまして、申し訳ありませんでした。

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

関連するQ&A

  • 「 複数ワークシートごと 」 を、希望順に 「 別ブック 」 へ貼り付けるマクロは ?

    エクセル 2002 です。 シートの数は、必ず 36 以下です。 下記例は、 1、「 頭の AK 」 は 必ず、 全部同じです。 2、「 数字部分の2桁 」 は、 必ず、  01 ~ 10 です。 3、「 * 」 は、 必ず、 6 桁 です。 4、たとえば下記例の 「 AK01****** 」 は、   「 AK01******  だけの見出し全部 ( AK01 だけが全く同じのデータが必ず続いてます) 」     を    「 01 の エリア  」 と 表現させて頂ます。    5、この エリア は 必ず、2つ か 3つ です。( 下記例では、エリア は 3つ です) この エリア順 を 希望順に、 「 別ブック2 」 へ貼り付けたいのです。 何卒、ご教授くださいませ。 ---例---------------------------------------------- ブック1 ( エリア順が 01、04、10 です ) シート見出し AK01****** ・・ AK01****** AK04****** ・・ AK04****** AK10****** ・・ AK10****** 別ブック2 ( エリア順を 10、04、01 にしたいです ) シート見出し AK10****** ・・ AK10****** AK04****** ・・ AK04****** AK01****** ・・ AK01******

  • VBAで一番後尾のシート見出しの色を変更したい

    WIN XP エクセル2003 BOOK内の一番後尾のシート見出しの色を変更したいのですが 下記コードでは見出しの色が変わりません。 何処が間違っているのかわかりません。ご教授お願い致します。 Sub シート見出し色変更() Dim N As Integer Dim sh As Worksheet N = ActiveWorkbook.Worksheets.Count Worksheets(N).Activate Set sh = ActiveSheet sh.Tab.ColorIndex = 3 Worksheets(1).Select End Sub

  • vba ワークシートを変数を用いて開くには

    初歩的な質問ですが、 ワークシートの書式が新しくなったことで、書き換えをすることになりました。 現在のエクセルファイルから、新しいエクセルファイルへ、セルの値を参照しながら VBAにて作業をしたいのですが、 Sub changesheet() Dim iname As String Dim wbname As String iname = InputBox("ブック名を入力", "対象ブックを入力") wbname = "シート2012(" & iname & ").xls" ActiveSheet.Range("P4").Value = Workbooks(wbname).Worksheets("Sheet1").Range("P4").Value End Sub この記載で実行すると、インデックスが有効範囲にありません とエラーになってしまいます。 変数(inputbox)を用いたセルの参照はどのように記述すればよろしいでしょうか? よろしくお願いします。

  • 異なるワークシートに値を貼り付けるマクロ

    数式の入ったワークシートから値のみをコピー&ペーストしたいのですが、うまくいきません。 どこにxlPasteValuesを入れたらいいのでしょうか?よろしくお願いします。 Sub copypaste() Dim bk As Workbook Set bk = Workbooks("‘貼り付け先.xlsm") Workbooks("Book1.xlsm").Worksheets("Sheet1").Range("B2:F6").Copy bk.Worksheets("Sheet1").Range("B2:F6")

  • 「 複数の各レコードごと 」 を、希望順に並び替えるマクロは ?

    以前に似た質問をさせて頂きました時は、マクロ以外のご回答を頂きましたので、 今回は、「 マクロの回答 」 をお願いしたいと投稿いたしました。 何卒、ご教授くださいませ。 A列 の 下6桁 を除く数字は、 必ず、 1 ~ 10 です。 その 「 A列を優先キー 」 にて、「 複数の各レコードごと 」 を、 希望順 に入れ替えたいんです。 たとえば 「 4****** だけのレコード全部 ( 連続してます ) 」 を 「 エリア1 」 と 表現させて頂ます。  * 部分は、 必ず 6 桁 です。 左隅の数字 は 1 ~ 10 までだけ変動します。 このエリアの数は、 2 ~ 3 まで変動します。 ------------------------------------------------   下記例は、エリアの数が 3つ で、     左隅の数字 4、 2、 10  の場合です。 実行前 ( エリア順が 4、2、10 です ) A列 4****** ・ ・ 4****** 2****** ・ ・ 2****** 10****** ・ 10****** ↓↓↓ 実行後1 ( エリア順を 10、4、2 にさせたい。 実際には、エリア順は全部で5通りになります。 ) A列 10****** ・ 10****** 4****** ・ ・ 4****** 2****** ・ ・ 2******

  • シート見出し名の下2桁を ”必ず ” 連番 かつ 12の倍数にするには?

    基本は、シート見出し名の 下2桁だけが、 連番  かつ  12の倍数で、 昇順になっていますが、 ”たまに” 一部シートが抜けている ( ない ) 時がありますので、 マクロ実行後に、 きちんと 合計  12枚  or  24枚  or  36枚  にしたいのです。 抜けている ( ない ) 場合、 抜けているシート数は、多くても  4・5枚 です ( 抜けているシートの場所は変動します )。 3通り のマクロが必要のように思いますが、下記例の 1通り をどうかご教授下さいませ。 ----------------------------- '下記例は、   抜けているシート 4番目 と 最終の36番目 を挿入し、シート数を 合計36 にしたい場合の例です。 'この場合、マクロ実行前は シート数36 を超えることはありません。 '「 **01 ~ **12 」 は、必ず昇順になっています。 ブック1( 実行前シート数 合計34 ) シート見出し **01 **02 **03    **05 **06 ・・ **12 **01 ・・ **12 **01 ・・ **11 ↓↓↓↓ ブック1( 実行後シート数 合計36 ) シート見出し **01 **02 **03  挿入したシート1  **05  **06 ・・ **12 **01 ・・ **12 **01 ・・ **11  挿入したシート2

  • Excel2003 1つのマクロを複数シートで実施

    初めて質問をさせていただきます。文面など、分かりにくい部分も 多々あるかと思いますが、ご容赦ください。 Excel2003のVBAで1つのマクロを複数のシートで実行したいのですが、 上手くできません。過去のQAも拝見しているのですが、 思うように動かずです。 具体的には Sub カレンダー作成G5() Dim 日数 As Long Dim 日付 As Variant Dim 月 As Integer, 年 As Integer Dim 入力セル As Range 日付 = Application.InputBox _ ("yyyy/m 形式の年月を半角で入力してください" & Chr(10) _ & " 例)2013年の1月 → 2013/1") If 日付 = False Or IsDate(日付) = False Then Exit Sub End If 月 = Month(日付) 年 = Year(日付) Range("c3").Value = DateSerial(年, 月, 1) Range("G5:Ak5").Select Selection.ClearContents 日数 = 0 For Each 入力セル In Selection 入力セル.Formula = "=$c$3+" & 日数 日数 = 日数 + 1 If 月 <> Month(Range("c3") + 日数) Then Exit For Next End Sub です。これを、1ブックのシートが1~10ある中から、例えば「シート2,5,8」と言った具合に、 複数のシートで実施したいのです。 (選択するシートは固定ですが、今後のシートの追加は、可能であれば想定したいです。)  なお、この記述も、前任者の記述であり、当方はまったくの未経験者とご認識ください。 従いまして、後学の為、1文ごとに簡単なコメントなどをいただけますと、本当にありがたく。 (さらに欲を申し上げますと、VBA初心者にお勧めの参考書やURLもご紹介いただけますと幸いです。)  また、OKwaveのシステムも理解できておりませんので、お礼も言葉のみとなってしまいます。 その点も、ご理解いただけますと幸いです。  ぜひとも「無知な人間に勉強する機会を」いただけましたらと思います。 有識者のみなさま、ご指導をよろしくお願いいたします。

  • 不特定のシートをマクロで削除を

    いつもお世話になります WINDOWS7 EXCELL2010 です。 シート「記入」にデーターを入力してそのデーターをいくつかの振分のシートに転記しています。 条件 削除したい 1 0000    の4桁のシート名のいずれかのシートを削除   ※例えば 11月4日のシート名は 1104 の4桁になります。         1月1日は 0101 となります。        今月で言えば 1101 ~ 1130 の30枚のシートがあります。 削除しない 1 文字名   のシートは削除しない 2 1 ~ 12 のシートは削除しない 上記の削除したいの方法は私なりの考えで2通り考えました。 他にいい方法があればおすすめ願えればありがたいです。 その1~ 00 の4桁のシート名が削除の対象ですので、 例えば今月で言いますと ~1031(10月31日分) 先月までのシートをマクロで削除する方法 その2~      添付図のようにB列に○のあるシートのみをマクロにて削除する方法 抽出するマクロは下記です。 Sub アクティブセルからシート名一覧を作成する() Dim sh As Object Dim row_num As Long Dim col_num As Long If MsgBox("アクティブセルから下にシート名一覧を作成してもいいですか?", vbYesNo + vbDefaultButton2) = vbNo Then Exit Sub row_num = ActiveCell.Row col_num = ActiveCell.Column For Each sh In ActiveWorkbook.Sheets Cells(row_num, col_num).Value = sh.Name row_num = row_num + 1 Next sh End Sub 小生の考えの その1~ その2~ または他の方法でいいアイディアがありましたら御指導いただけませんでしょうか。 宜しくお願いします。

  • 不特定のシートをマクロで削除を ~2

    いつもお世話になります WINDOWS7 EXCELL2010 です。 御指導を仰ぎたいのは、 参照図で言いますとシート名「シート名一覧」のA列に下記のマクロで抽出されたシート名の一覧があります。 このシートのB列に削除したいシートに○(例えばB16 B17)を入れるとマクロでそのシートが削除されるマクロが可能であれば是非ご教授いただけませんでしょうか。 抽出するマクロは下記です。 Sub アクティブセルからシート名一覧を作成する() Dim sh As Object Dim row_num As Long Dim col_num As Long If MsgBox("アクティブセルから下にシート名一覧を作成してもいいですか?", vbYesNo + vbDefaultButton2) = vbNo Then Exit Sub row_num = ActiveCell.Row col_num = ActiveCell.Column For Each sh In ActiveWorkbook.Sheets Cells(row_num, col_num).Value = sh.Name row_num = row_num + 1 Next sh End Sub 宜しくお願いいたします。

  • マクロで複数のシートを保護&パスワードをかける為に下記式を作成しました

    マクロで複数のシートを保護&パスワードをかける為に下記式を作成しましたが エラー”400”のみ出て上手く行きませんでした。 どこか式がおかしいのでしょうか。。。 一応式を入力しておきます。 超初心者でまったく意味がわからないので、どなたか宜しくお願い致しますm(__)m Sub AllProtect() Dim sh As Worksheet Dim myPassword As String myPassword = InputBox("パスワードを入力してください", "パスワード") For Each sh In Worksheets sh.Protect Password:=1234 Next End Sub Sub AllUnprotect() Dim sh As Worksheet Dim myPassword As String myPassword = InputBox("パスワードを入力してください", "パスワード") For Each sh In Worksheets sh.Unprotect Password:=1234 Next End Sub

専門家に質問してみよう