- ベストアンサー
エクセル(2000)のマクロについて
sheetaaa~(複数シート)~sheetZZZをすべて選んでこれらのシートのコピーを、他のブックに作成するというマクロを自動保存で作りました。出来上がったマクロをみるとコピーするシート名がひとつひとつマクロの中にかかれてしまいます。sheetaaaとsheetZZZはいつもコピーするので問題ないのですが、、間に入っているシートは数がどんどん増えていくので、マクロの中でおのおののシート名を指定してしまうのは困るのです。 マクロを実行した際に、sheetaaaとsheetZZZの間あるシートは無条件でコピーを作成するというマクロを作成したいのですが、どのように作ったらいいのかわかりません。 どなたかアドバイスいただけないでしょうか。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
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を使っています。
その他の回答 (3)
- nishi6
- ベストアンサー率67% (869/1280)
マクロ記録で作成される、"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)
色々ご解答が出ています。しかし ●挿入(=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)
手元に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はコピーせずに残しておきます。うまく説明ができなくて申し訳ありません。もう一度よろしくお願いします。
お礼
ありがとうございました。 採用させていただきました。