電子書籍の厳選無料作品が豊富!

Excel初心者です。
書式の関係上、1つのブックに約10シートを作成しています。
「A(1)」「A(2)」・・・「B(1)」「B(2)」・・・
と2種類のシート名になっています。
これをAのブック、Bのブックと2つに分けたいのですが、どのようにすればよいでしょうか?

Worksheets(1).Copy
では1つのシートしか新規ブックにできませんし、
Workbooks.Add
は要らないシートが出来てしまいます。

よろしくご教授おねがいします。

A 回答 (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)

が移動されてしまいます。
    • good
    • 0
この回答へのお礼

ありがとうございます。

1枚目を調べる時には、myCnt = 0ですので、ws.Select True となり、
2枚目以降を調べる時は、myCnt = 1ですから、ws.Select False となるわけですね。

大変勉強になりました。
ありがとうございました。

お礼日時:2007/09/04 10:06

「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
    • good
    • 0
この回答へのお礼

ありがとうござます。

希望する結果が得られました。

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

お礼日時:2007/09/04 00:28

こんにちは


何も考えず単純にしましたが、参考までに・・・
保存については追加してください

'以下のコードは種類が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
    • good
    • 0
この回答へのお礼

ありがとうございました。

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

お礼日時:2007/09/04 00:17

ABあるブックを開きます。


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

ありがとうございました。

当方の言葉足らずで申し訳ないですが、
VBAに関する質問でした。

お礼日時:2007/09/04 00:16

ShiftかCtrlを押しながら対象のシートをクリックすると複数選択できます。


その状態でコピーすると全部できますよ。
    • good
    • 0
この回答へのお礼

ありがとうございました。

当方の言葉足らずで申し訳ないですが、
VBAに関する質問でした。

お礼日時:2007/09/04 00:16

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


おすすめ情報