• ベストアンサー

エクセル(2000)のマクロについて

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

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

  • ベストアンサー
  • tamazo-
  • ベストアンサー率60% (35/58)
回答No.2

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を使っています。

Ryokucha
質問者

お礼

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

その他の回答 (3)

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.4

マクロ記録で作成される、"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

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

色々ご解答が出ています。しかし ●挿入(=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を除く全てとかになると、指定が難しい(不可能?)でしょう。

  • tamazo-
  • ベストアンサー率60% (35/58)
回答No.1

手元にExcel97しかないので97で確認しました。 Sheets.Copy before:=Workbooks("Book2").Sheets(1) とすると、アクティブなブックの全てのシートが Book2.xlsのSheet1の前にコピーされます。 Sheets(Array("aaa", "bbb", "zzz"))とせずに 単にSheetsと書けば、全てのシートが対象になると 思います。

Ryokucha
質問者

補足

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

関連するQ&A