• ベストアンサー

excel 複数のシートを新規ブックに分けて保存

Excel初心者です。 書式の関係上、1つのブックに約10シートを作成しています。 「A(1)」「A(2)」・・・「B(1)」「B(2)」・・・ と2種類のシート名になっています。 これをAのブック、Bのブックと2つに分けたいのですが、どのようにすればよいでしょうか? Worksheets(1).Copy では1つのシートしか新規ブックにできませんし、 Workbooks.Add は要らないシートが出来てしまいます。 よろしくご教授おねがいします。

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

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.5

#4です。 > 「myCnt = 0」はなぜあるのですか? > カウントするならなくても良いのでは?と思いました。 Selectメソッドのヘルプを引用すると  # Select(Replace)  #  # Replace  # 選択位置を指定したオブジェクトのみを選択するには、True を指定します。  # 既に選択されていたオブジェクトと指定したオブジェクトを選択するには、False を指定します。 ws.Select True → ws.Select myCnt = 0 で代用しています。 myCnt = 0 なら True です。 一番最初に見つけた「A*」で始まるシートは True じゃないと、開始時点で選択していたシートも付いてきてしまいますので、これが無いと期待する結果になりません。 例えばこの引数をつけない場合、   A(1),A(2),A(3),B(1),B(2),B(3) という構成で「B(3)」で始まるシートが選択された状態でマクロが実行されると   A(1),A(2),A(3),B(3) が移動されてしまいます。

PearlJam69
質問者

お礼

ありがとうございます。 1枚目を調べる時には、myCnt = 0ですので、ws.Select True となり、 2枚目以降を調べる時は、myCnt = 1ですから、ws.Select False となるわけですね。 大変勉強になりました。 ありがとうございました。

その他の回答 (4)

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.4

「A」で始まるシート名を別ブックに移動させます。 シート枚数が可変でも大丈夫だと思います。 Sub Test() Dim ws As Worksheet, myCnt As Integer  myWord = "A*"  myCnt = 0  For Each ws In ActiveWorkbook.Worksheets    If ws.Name Like myWord Then       ws.Select myCnt = 0       myCnt = myCnt + 1    End If  Next ws  If myCnt > 0 Then ActiveWindow.SelectedSheets.Move End Sub

PearlJam69
質問者

お礼

ありがとうござます。 希望する結果が得られました。 本題から逸れますが、1点疑問があります。    If ws.Name Like myWord Then       ws.Select myCnt = 0       myCnt = myCnt + 1    End If の「myCnt = 0」はなぜあるのですか? カウントするならなくても良いのでは?と思いました。 当方のVBAの勉強の為、お教えいただければと思います。

  • WWolf
  • ベストアンサー率26% (51/192)
回答No.3

こんにちは 何も考えず単純にしましたが、参考までに・・・ 保存については追加してください '以下のコードは種類が2つで且つ5シートずつに分かれていると仮定 Sub test() Dim OwnBN WBC = Workbooks.Count If WBC <> 1 Then MsgBox "振り分けたいブック以外は閉じてください" Exit Sub End If OwnBN = ActiveWorkbook.Name Sheets(Array("A(1)", "A(2)", "A(3)", "A(4)", "A(5)")).Select Sheets(Array("A(1)", "A(2)", "A(3)", "A(4)", "A(5)")).Copy NewBN = ActiveWorkbook.Name ActiveWorkbook.Windows(NewBN).Caption = "Aタイプ" Windows(OwnBN).Activate Sheets(Array("B(1)", "B(2)", "B(3)", "B(4)", "B(5)")).Select Sheets(Array("B(1)", "B(2)", "B(3)", "B(4)", "B(5)")).Copy NewBN = ActiveWorkbook.Name ActiveWorkbook.Windows(NewBN).Caption = "Bタイプ" Windows(OwnBN).Activate End Sub

PearlJam69
質問者

お礼

ありがとうございました。 しかし、シート数は固定ではないので Arrayは使えないんです・・・。 当方の言葉足らずで申し訳ありません。

  • hayasi456
  • ベストアンサー率40% (2402/5878)
回答No.2

ABあるブックを開きます。 「A」のシートのみ「Shift」キーを押しながら選択します。 選択したシート名の適当な位置で右クリックし「移動またはコピー」を選びます。 「移動先のブック名」で(新しいブック)を選び「OK」をクリックします。 新しく出来たブックを「名前を付けて保存」して下さい。

PearlJam69
質問者

お礼

ありがとうございました。 当方の言葉足らずで申し訳ないですが、 VBAに関する質問でした。

  • gundai44
  • ベストアンサー率33% (43/129)
回答No.1

ShiftかCtrlを押しながら対象のシートをクリックすると複数選択できます。 その状態でコピーすると全部できますよ。

PearlJam69
質問者

お礼

ありがとうございました。 当方の言葉足らずで申し訳ないですが、 VBAに関する質問でした。

関連するQ&A