プロが教えるわが家の防犯対策術!

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

A 回答 (2件)

> 希望順に、 「 別ブック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
 

この回答への補足

ご回答、誠に有難うございます。
>「希望順」とは、シート名の昇順 で並べ替えることのように解釈するのですが、

昇順だけとは、限りません。
質問内容不足で、すみません。
---他の例----------------------------------------------
ブック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

補足日時:2007/01/12 18:40
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/01/17 00:40

こんにちは。



どうやら回答がつかないようですね。

oshietecho-dai さんのご質問は、ここ最近のものはすべてみていますが、なかなか、回答がつけにくい気がしました。今回(前回)のご質問は、あるレベル以上の人からすれば、それほど難しいものではありません。

同じような質問を繰り返すと、いままでの常連さんは回答をつけなくなってしまいます。なるべく、同系の質問は一度キリにしてしてください。それと、「Sub 見出し並び替え()
」は、ご自身のものですか?もし、そうでしたら、前回の方の説明をもう少し詳しくさせていただきます。

配列用の変数を、ファイル名を配列に入れます。

それを、私ならは、バブル・ソートアルゴリズムを使います。そして、該当しないシートの存在を考慮して、シートの Index 1 のところで、配列変数の添え字の上(Ubound)から、順に下位に入れていきます。

次に、その配列変数を、Filter 関数を使って、抜き出して、それを再び、同じようにシートの並べ替えをしていけば出来上がります。

つまり、シートの並べ替えと、ユーザーオプションの並べ替えは、同じ流れの中で行います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/01/17 00:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!