• ベストアンサー

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

エクセル 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******

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

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

> 希望順に、 「 別ブック2 」 へ貼り付けたいのです。 「希望順」とは、シート名の昇順 で並べ替えることのように解釈するのですが、 もし、それで宜しければ、こんな感じで如何でしょうか。 Sub ShCopySort() '全シートを新ブックへコピーし、シート名で並べ替え Dim N As Integer Dim M As Integer Worksheets.Copy For N = 2 To Worksheets.Count   For M = 1 To N - 1     If Worksheets(M).Name > Worksheets(N).Name Then       Worksheets(N).Move before:=Worksheets(M)       Exit For     End If   Next M Next N End Sub  

oshietecho-dai
質問者

お礼

お礼が、遅くなって誠に申し訳ありませんでした。 未熟なりに、ご回答コードを試行錯誤してました。 まだ完全では、ありませんが、複数通りコードで可能じゃないかと思います。 どうも有難うございました。

oshietecho-dai
質問者

補足

ご回答、誠に有難うございます。 >「希望順」とは、シート名の昇順 で並べ替えることのように解釈するのですが、 昇順だけとは、限りません。 質問内容不足で、すみません。 ---他の例---------------------------------------------- ブック1( エリア順が 02、05、10 です ) シート見出し AK02****** ・・ AK02****** AK05****** ・・ AK05****** AK10****** ・・ AK10****** ブック2( エリア順を 10、02、05 にしたいです ) シート見出し AK10****** ・・ AK10****** AK02****** ・・ AK02****** AK05****** ・・ AK05****** ------------------------------------------------ 補足 1、 全部で、何通りの組合せが存在するか ? 例えば、 今回の質問の「 1通り 」 は、エリア順 「 1・2・3 」 を → 「 3・2・1 」にしました。 今回の例を、1通り の希望順 と しますと、 1、 例えば、「エリア が 3つ の場合 」の、希望順は、全部で 「 5通り 」 となります。 エリア順 「 1・2・3 」 → 「 3・2・1 」にします。 エリア順 「 1・2・3 」 → 「 3・1・2 」にします。 エリア順 「 1・2・3 」 → 「 2・3・1 」にします。  エリア順 「 1・2・3 」 → 「 2・1・3 」にします。 エリア順 「 1・2・3 」 → 「 1・3・2 」にします。 エリア順 「 1・2・3 」 → 「 1・2・3 」にします。× 同じなので不必要。 2、 例えば、「エリア が 2つ の場合 」の、希望順は、全部で 「 1通り 」 となります。 エリア順 「 1・2 」 → 「 2・1 」にします。 エリア順 「 1・2 」 → 「 1・2 」にします。× 同じなので不必要。 --最終的には下記へつなげたいと考えております--------------- 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)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 どうやら回答がつかないようですね。 oshietecho-dai さんのご質問は、ここ最近のものはすべてみていますが、なかなか、回答がつけにくい気がしました。今回(前回)のご質問は、あるレベル以上の人からすれば、それほど難しいものではありません。 同じような質問を繰り返すと、いままでの常連さんは回答をつけなくなってしまいます。なるべく、同系の質問は一度キリにしてしてください。それと、「Sub 見出し並び替え() 」は、ご自身のものですか?もし、そうでしたら、前回の方の説明をもう少し詳しくさせていただきます。 配列用の変数を、ファイル名を配列に入れます。 それを、私ならは、バブル・ソートアルゴリズムを使います。そして、該当しないシートの存在を考慮して、シートの Index 1 のところで、配列変数の添え字の上(Ubound)から、順に下位に入れていきます。 次に、その配列変数を、Filter 関数を使って、抜き出して、それを再び、同じようにシートの並べ替えをしていけば出来上がります。 つまり、シートの並べ替えと、ユーザーオプションの並べ替えは、同じ流れの中で行います。

oshietecho-dai
質問者

お礼

こんばんわ、 ご回答、誠に有難うございます。 度々と申し訳ありませんでした。 時間はかかりますが、試行錯誤していきます。

関連するQ&A