牛、豚、鶏、どれか一つ食べられなくなるとしたら?

sheetaaa~(複数シート)~sheetZZZをすべて選んでこれらのシートのコピーを、他のブックに作成するというマクロを自動保存で作りました。出来上がったマクロをみるとコピーするシート名がひとつひとつマクロの中にかかれてしまいます。sheetaaaとsheetZZZはいつもコピーするので問題ないのですが、、間に入っているシートは数がどんどん増えていくので、マクロの中でおのおののシート名を指定してしまうのは困るのです。
マクロを実行した際に、sheetaaaとsheetZZZの間あるシートは無条件でコピーを作成するというマクロを作成したいのですが、どのように作ったらいいのかわかりません。
どなたかアドバイスいただけないでしょうか。

A 回答 (4件)

手元にExcel97しかないので97で確認しました。



Sheets.Copy before:=Workbooks("Book2").Sheets(1)

とすると、アクティブなブックの全てのシートが
Book2.xlsのSheet1の前にコピーされます。
Sheets(Array("aaa", "bbb", "zzz"))とせずに
単にSheetsと書けば、全てのシートが対象になると
思います。

この回答への補足

book1のすべてのsheetをコピーするのではなく、sheetaaa,sheetbbb~複数シート~sheetzzzという構成があってコピーしたいのは、bbb~zzzで、この間のシートが増えていくという構成です。aaaはコピーせずに残しておきます。うまく説明ができなくて申し訳ありません。もう一度よろしくお願いします。

補足日時:2002/07/22 13:08
    • good
    • 0

aaaシートはコピーしない、となると、aaa以外を丹念に


コピーしていく方法もあるかと思いますが、面倒なので、
全部コピーした後でaaaだけ消すというのはどうでしょう。

Sheets.Copy before:=Workbooks("Book2").Sheets(1)
Workbooks("Book2").Sheets("aaa").Select
Application.DisplayAlerts = False
ActiveWindow.SelectedSheets.Delete
Application.DisplayAlerts = True

シートを消すときに「戻せませんよ」とメッセージが出るので、
それを避けるためにDisplayAlertsを使っています。
    • good
    • 0
この回答へのお礼

ありがとうございました。
採用させていただきました。

お礼日時:2002/08/06 09:17

色々ご解答が出ています。

しかし
●挿入(=Add)された順番で、(FromTo的に、)○○から××まで、続いた番号のシートを表現する表現法は存在しないというのが解答ではないですか。そう言うご質問ではないのですか。
その上で#3のご解答の「全てを指定できる」の「Sheets」が次に近いと思う。
●ShiftキーやCtrlキーを押して、シートTABをクリックすると、マクロ記録では、「Array」に表現され、これは連続でなく、個別に指定されたときに対応する表現方法である。
Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Select
ActiveWindow.SelectedSheets.Delete
●Sheets(”Sheet1:Sheet5”).Selectを認めてくれて
 Sheetの1~5を指定できれば良いと思うが、不可のようですね。
●今回の質問は、上記の最後のシート(Sheet5に
当たる)も、毎回動くので、表現上決められないケースでしょうか。Sheet1、Sheet2を除く全てとかになると、指定が難しい(不可能?)でしょう。
    • good
    • 0

マクロ記録で作成される、"Sheetaaa","Sheetbbb",・・・,"Sheetzzz" の文字列を自動的に作成しそのシートをコピーします。



操作を想像すると、"Sheetaaa"タブを選択し、最後のほうにある"Sheetzzz"タブを選択して、その間にある
"Sheetbbb"~"Sheetzzz" をコピー対象にするのでしょうか。
下のコードはシートタブ"Sheetaaa"と"Sheetzzz"で挟まれたシート("Sheetaaa"は除く)をコピーしています。

"Sheetbbb"から"Sheetzzz"迄を適当に選択し、選択したシートのみコピーするなら少しコードが変わります。

'現ブックをBook2にコピーする
Sub SheetsCopy()
  'ワークシートのインデックスを調べる
  Dim w As Integer 'ワークシートのインデックスカウンタ
  Dim startIdx As Integer 'コピーする最初のインデックス
  Dim endIdx As Integer 'コピーする最後のインデックス
    startIdx = Worksheets("Sheetaaa").Index + 1
    endIdx = Worksheets("Sheetzzz").Index

  '配列の格納されたバリアント型の値を作る(Array関数)
  Dim myArray As Variant 'worksheet名の配列
  Dim cot As Integer 'カウンタ
    myArray = Array(Worksheets(startIdx).Name)
    For w = startIdx + 1 To endIdx
      cot = UBound(myArray) + 1
      ReDim Preserve myArray(cot)
      myArray(cot) = Worksheets(w).Name
    Next

  'コピー実行(コピー先はBook2)
  Sheets(myArray).Copy Before:=Workbooks("Book2").Sheets(1)
End Sub
    • good
    • 0

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