• ベストアンサー

シートコピーがわかりません(VBA)

いつもお世話になっております。マクロを最近仕事で作り始めましたが、初心者ゆえ、四苦八苦しており、本日質問させていただくことになりました。 3枚目から最後のシートを別ブックにコピーするマクロを作りたいのですがどのようにしたらいいでしょうか。 複数のシートをコピーするのは Sheets(Array("1", "2", "3", "4", "5").Copy Before:=Sheets(13) というのはわかるのですが、「3枚目以降のシートすべて」とする方法を教えていただきたいと思います。 基本的なことかもわかりませんが、よろしくお願いします。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんばんは。 本来は、シートというのは、Sheets(グラフシート・マクロシート・ワークシート) と ありますが、ワークシート(Worksheets)以外は、コピーしたりすることがないので、以下のようにしました。 コピーする場合は、あまり、以下のようなマクロは書きませんね。シート名が、() カッコ付きになったりしますから、その都度、コピーし名前を変更していくのが通例です。 それから、結構、これは、間違いやすいコードですね。シート名自体が数字で、うっかりWorksheets Indexをそのまま使うところでした。シート名とIndex と一致しなかったら、違ったものを選択してしまいます。それに、アクティブシートから、False オプションで行うと、そのアクティブシートも含まれてしまいます。 '---------------------------------- Sub SheetsCopy() Dim i As Integer  Application.ScreenUpdating = False  '3枚目以降のシートすべて  For i = 3 To ActiveWorkbook.Worksheets.Count   If i = 3 Then   ActiveWorkbook.Worksheets(CStr(i)).Select   Else   ActiveWorkbook.Worksheets(CStr(i)).Select False   End If  Next i 'コピーの場合   ActiveWorkbook.Windows(1).SelectedSheets.Copy Before:=Worksheets(13)  Application.ScreenUpdating = False End Sub '----------------------------------

関連するQ&A

  • VBA シートのコピー

    シートをコピーし、挿入をシートの末尾にする場合はどうなりますか? マクロを使ってやったときに、20のシートがあったため、下記のようになりますが、これだと、2回目以降にコピーしたとき20番目に挿入されて末尾には移動しないですよね。 そこは、どうしたらいいですか?? シート名「あああ」 Sheets("あああ").Copy After:=Sheets(20) お願いします。

  • VBAでsheetのコピー

    初めまして、宜しくお願い致します。環境:WindowsXPSP3EXCEL2010やりたい事Book1に複数の名前の付いたsheetがあります。sheetの数は可変です。このBook1のsheetをVBAから新に作成するBook2のsheet1に纏めたいのですが、Book2のsheet1だけに纏めたいのですが、Book2のsheet1の名前は、固定で構いません。Book1の一番初めのsheetにコピーする時だけ3行目にある見出しだけは、Book2のsheet1に付けたく。それ以外のBook1のsheetは、デターだけをコピーしたいのですが、作成したマクロでは、実行時エラーがでます。【実行時エラー'9'】【インデックスが有効範囲にありません】とでます。次の部分です。「Sheets("mySheetName(i)").Copy Before:=Workbooks("Book1").Sheets("Sheet1")」また、Book2のsheet1の名前は固定で構いません。しかし、マクロの記述の仕方も判りません。どなたかご教授願います。何卒宜しくお願い申し上げます。

  • ExcelのVBAでシートのコピー

    Excel2000 Win2000 複数(最低5)のシートが存在するExcelのBookでExcelのVBAを使用して strSheetName="XXX1" intSheetNo = 1 Sheets(strSheetName).Copy after:=Sheets(intSheetNo) とシートのコピーをしています。 この時コピーされたシートのインデックスが2にならないんですが、何故なんでしょ? やりたい事はコピーしたシートの名前をExcelが勝手につけた名前から変更したいんです。 コピーされたシートのインデックスが2になると思っていたので上手く行きません。 Sheets(intSheetNo + 1).Name = "XXX1-1"

  • EXCEL VBA(作業グループの解除)

    EXCEL VBAについての質問です。 複数のシートをコピーして別ブックに保存した後、元のブックが作業グループになってしまいます。 これを解除するコードを伝授いただけませんでしょうか? Sheets(Array("1", "2", "3")).Select Sheets(Array("1", "2", "3")).Copy

  • excelシートから別のexcelシートへのコピー

    動作環境は、OS:XP、VB6+SP6です。 シート名がわかっている場合ですと Sheets(Array("sheet1", "sheet2")).Copy Before:=Workbooks("コピー先.xls").Sheets(1) のようにできるのですが、不明な場合はどうしたらよいのでしょうか? コピー元ワークブックのシート数とシート名が不明なので、まずコピー元のシート名を取得しました。 しかし文字列だと、上記Arrayの中に埋め込むことができません。 どなたかご存知でしたら教えてください。

  • エクセルのマクロでシートのコピー

    いつもお世話になっております。 エクセル2000で次のことをマクロで行いたいのです。 いくつかWorkbookが開いている状態で、シートのコピーを行うのですが、シート名やブック名はその都度違います。 具体的には、Workbook"A" に "a"、"b"、"c" の3つのシート、Workbook"B" に "f"、"g"、"h"の3つのシートがあり、 Workbook"A" の Sheet("a") を Workbook"B" の Sheet("h") の前にコピーしたいのです。 Sheets(1).Copy before:=Workbooks("B.xls").Sheets(3) ところがWorkbookの名前がその都度変わるので困っています。 ブック間の移動は ActiveWindow.ActivateNext などで行っていますがシートのコピーがどうしても分からないので お願いします。  

  • ACCESS EXCELシートのコピー

    ACCESSでEXCELシートのコピーを教えてください。 ブックに原本というシートがあり、それを先頭にCOPYして シート名を店舗名にしようと思っています。 原本が原本(2)にCOPYはできるのですが、名前の変更が 出来ません。 原本(2)の(2)がまずいのか、”インデックスが有効の範囲にない” でエラーになります。 COPYする時に、直接、名前を指定出来るならその方がありがた いのですが、何か方法はありませんか? EXCELブックOPENして、店舗マスタを読みながらCOPYするようにしています。 xlsobj_.sheets("原本").Copy before:=xlsobj_.sheets("原本") xlsobj_.sheets("原本(2)").NAME = 店舗名 単純に原本と言うシートを10個程度(店舗が10店舗ぐらいあります) COPYしてそれぞれのシート名を店舗名にしたいだけです。 宜しくお願い致します。

  • VBAの質問(シートのコピーについて)

    VBAの質問(シートのコピーについて) VBAのシートのコピーについてご教授願います。 あるマクロを実行すると、以下のようなシートが作成されます。 シート名:aaaa シート名:bbbb シート名:cccc シート名:dddd 上記シート名のうち、aaaa、bbbb、cccc、ddddを別ワークブックへコピーしたく、以下のように マクロを書いております。 (既に配列strA()にaaaa、bbbb、cccc、ddddが入っております。) Dim strA() As String  ・・・  処理   ・・・ 'シートのコピー For i = 0 To UBound(strA) If i = 0 Then CopySheet = Chr(34) & strA(i) & Chr(34) ElseIf i > 0 Then CopySheet = CopySheet & "," & Chr(34) & strA(i) & Chr(34) End If Next i Sheets(Array(CopySheet)).Copy ---エラーメッセージ--------------- 上記処理を流すと、実行時エラー'9': インデックスが有効範囲にありません。 -------------------------------- しかし、以下のように配列を直接指定すると、正常にコピーされます。 'Sheets(Array(strA(0), strA(1),strA(2),str(3))).Copy 初歩的な問題かもしれませんが、宜しくお願い致します。

  • Excelでシートをコピーする時に「シート名が長すぎます」と表示される

    環境 OS : Win2000 SP4 Office : Excel 2000 SP1 表題の通りでシート名「P.05-2_BK(-2)」を同じブック内でコピーしようとすると「シート名が長すぎます」とメッセージが出てコピーできません。 MSのサイトではシート名は半角31文字までOKと書いてあるのですが・・・ マクロでは大丈夫かな?と思い Sub Macro1() Sheets("P.05-2_BK(-2)").Select Sheets("P.05-2_BK(-2)").Copy After:=Sheets(24) End Sub と言うマクロを実行してみましたが、2行目で同じエラーが出ます。 また、ブックが悪いのかと思い、シートを新しいブックにコピーして、その新しいブック内でコピーしようとしても同様にエラーが出てコピーできません。 何故なんでしょう??

  • VBAでシートのコピー

    お世話になっております。 VBAの未熟者ですが、個人の資料作成のためのシステムをコツコツと作っております。 今までマクロでシートのコピーをやっていたのですが、コマンドボタンでできるように変更しようとしてうまくいきません。 ファイルAの中にある幾つかのシートの内、シート「個人事業」を「請求書」ファイルの「Sheet2」にコピーしたいのです。その後名前を変更しています。 マクロのプログラムをそのままコピーしてみたのですが、[sheets("個人事業").paste]のところでエラーが出ます。 マクロとコマンドボタンではやはり設定を変更しないといけないのでしょうか?ご教授お願いします。 Private Sub CommandButton1_Click() Sheets("Sheet2").Select Windows("未請求リスト.XLS").Activate Sheets("個人事業").Select Selection.Copy Windows("請求書.xls").Activate Sheets("Sheet2").Select Sheets("個人事業").Paste Sheets("Sheet2").Name = "個人事業請求一覧" Sheets("請求書").Select End Sub 宜しくお願いします。

専門家に質問してみよう