エクセルVBAでシートのフォーマットをコピーして支店別に保存する方法

このQ&Aのポイント
  • エクセルVBAを使用して、シート1のフォーマットをシート2のB列の数だけコピーし、シート2のA列の支店別に新しいブックに保存する方法について教えてください。
  • 現在、単純なコピー保存はできていますが、上記の要件を満たすためにはどのような方法を取るべきでしょうか?初心者ですので、詳しい手順を教えていただけると助かります。
  • 以下のVBAマクロを使用して、シートのコピー保存を行っていますが、全てを自動的に行う方法を教えていただけますか?
回答を見る
  • ベストアンサー

エクセルVBAについて

<sheet1>フォーマット(コピーするシート) <sheet2>    A列    B列 ○○支店  15 △△支店  10 ××支店  28 ■■支店  25 ◎◎支店  18 sheet1のフォーマットをsheet2のB列の数コピーして、sheet2のA列の支店別に新しいブックへ保存するという作業のマクロを組みたいのですがどのようにしたらよいでしょうか?お教えください。VBAに関しまして初心者で、勉強しているのですがいまいちわかりません。どうぞよろしくお願いします。 今、一つだけコピーして保存するということはできていますが、上記のように全部を自動的にしたいのですが・・・ Sub グラフをコピーして別ブックへ保存() Dim mySheet As Worksheet Set mySheet = ActiveWorkbook.Worksheets("グラフ") mySheet.Copy ActiveWorkbook.SaveAs Filename:="大阪第一" '別名を付けてブックを保存する ActiveWorkbook.Close '別名ブックを閉じる End Sub よろしくお願いします。

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

  • ベストアンサー
  • takibo
  • ベストアンサー率57% (116/200)
回答No.4

No.1です。 全く同じコードで動作確認してますのでこちらで原因の判断は難しいですね… 以下のことを試してみて何か変わるといいのですが。 ・コードの1行目(Application Screen~)部分を消して画面の動きを見てみる ・一覧表(sheet2)を並べ替えてみる、または入力しなおしてみる 他サイトの方で良い回答が得られているといいですね。 お力になれなくてすみません。

miechin
質問者

お礼

お返事遅くなりました。すいません。 原因は、VBAのプロジェクトのところにコピーしたsheetの履歴が残るせいか?!よくわからないです。 最大85sheetぐらいなのですかね?何故かはわからないです。ありがとうございました。 コピーしたsheetをブックに保存ではなく、新しいブックにsheetをコピーしていき最後に保存するというふうに順序を入れ替えればとアドバイスをいただきました。 でも、まだ保留中です。また何かありましたら宜しくお願いします。

その他の回答 (3)

  • zurumukeZ
  • ベストアンサー率21% (10/47)
回答No.3

エクセルVBAのことはここのほうが詳しく教えてくれます。 http://park7.wakwak.com/~efc21/cgi-bin/wwwlng.cgi

  • takibo
  • ベストアンサー率57% (116/200)
回答No.2

No.1です。 実際見ていないので定かではありませんが、シート名が違うのではないでしょうか?(半角/全角など) 先程のコードは全角です。 シートの名前に左右されないようにするには Sheets("グラフ").Copy after:=Worksheets(Worksheets.Count) の部分を Sheets(1).Copy after:=Worksheets(Worksheets.Count) としてください。 カッコ内の数字はシートのインデックスで、画面上左から何番目のシートか、ということをあらわします。 通常 sheet1=sheets(1)となります。

miechin
質問者

お礼

度々ありがとうございます。 シート名は正しいとおもうのですが・・・!? 保存するブックは12支店分あり、5支店目でシートコピー”グラフ-11”で止まってしまいます。 4支店分は保存され大丈夫なので、急に5支店目で止まるのがわかりません。 毎回同じところなので5支店目のところの”グラフ-12”からおかしいのでしょうね? どうなんでしょうか?本当に申し訳ございません。

  • takibo
  • ベストアンサー率57% (116/200)
回答No.1

Sub グラフをコピーして別ブックへ保存() Dim MyS() As String Application.ScreenUpdating = False パス = ThisWorkbook.Path '←←←作業中のBookの保存先を取得 i = 1 '←←←sheet2の1行目から… Do While Worksheets(2).Cells(i, 1) <> "" '←←←空白でデータ終了 支店 = Worksheets(2).Cells(i, 1).Value 枚数 = Worksheets(2).Cells(i, 2).Value For c = 1 To 枚数 Sheets("グラフ").Copy after:=Worksheets(Worksheets.Count) Worksheets(Worksheets.Count).Name = "グラフ-" & c Next ReDim MyS(1 To 枚数) For m = 1 To 枚数 MyS(m) = "グラフ-" & m Next Sheets(MyS).Move ActiveWorkbook.SaveAs Filename:=パス & "\" & 支店 ActiveWorkbook.Close i = i + 1 Loop MsgBox "処理終了" End Sub ・sheet2の1行目から一覧データがあり、空白でデータ終了とする(A列:保存するファイル名、B列:コピーする枚数) ・[グラフ]というシートをコピーし、[グラフ-1][グラフ-2]…と名前をつける ・作業中のBookと同じ場所に保存する(念のため) 上記の条件の下で動くように作ってみました。 作業中Bookに必要枚数だけコピーしてから別Bookに移動して保存、という方法をとっています。

miechin
質問者

お礼

ありがとうございます。試してみました。 途中に”実行時エラー1004” worksheetクラスのCopyメソッドが失敗しました。 という表示がでて、進まなくなります。 Sheets("グラフ").Copy after:=Worksheets(Worksheets.Count) この部分がデバック必要みたいな感じです?! 同じこと繰り返しなのですが、何故でしょうか? 何度もすいません。

関連するQ&A

  • VBAでVBAを削除?

    作業中のブックから一枚のシートを以下のSub 別ファイル保存()プロシージャで別のブックとして保存します。それはうまくいったのですが、この元になるシートには Private Sub Worksheet_SelectionChange(ByVal Target As Range) '途中略 End Sub と Private Sub Worksheet_Deactivate() '途中略 End Sub の二つのVBAが記述してあり、これまで一緒に別のブックに入ってしまいます。 これを防ぐにはどのようにすればよいのでしょうか? Sub 別ファイル保存() mypath = ThisWorkbook.Path fn = Sheets("Declarations").Range("H15").Value & Format(Date, "yymmdd") ffn = mypath & "\" & fn & ".xls" Sheets("Declarations").Copy ActiveWorkbook.SaveAs Filename:=ffn ActiveWorkbook.Close End Sub

  • エクセル2000 VBA

    ウィンドウズ2000 エクセル2000です。 ブックの中のシートを一枚だけコピーして別のブックに名前を付けて保存したいと思っています。 「'コピーするシートを選ぶ Sheets("概要表").Select '全部選んでコピー Cells.Select Selection.Copy '新しいブックを選ぶ Workbooks.Add Cells.Select '新しいブックにコピーを貼り付ける。 ActiveSheet.Paste Application.CutCopyMode = False」 ここまでは順当に動いています。 質問は アクティブになった新しいブックを保存したいです。 一行から二行目にかけて設定しているファイルネームを、 メッセージボックスを表示させてそこに入力した文字列 をファイルネームとして(現在****)保存したいのですが。 ActiveWorkbook.SaveAs Filename:= _ "**********.xls", FileFormat:= _ xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _ , CreateBackup:=False どなたかよろしくお願いします。

  • ExcelのVBAでブックの保存

    ExcelのVBAでブックを追加し保存を行っています。 その際、保存は、どこに行うのがよいのですか bookですか。sheetですか。 両方で、SaveAsができまが、使い分けがあるのでしょうか。 どのように使い分けするのでしょうか。 Workbooks.Add ActiveSheet.Name = "サンプル" ActiveSheet.SaveAs OutFileName ActiveWorkbook.SaveAs OutFileName ActiveWorkbook.Close

  • エクセルVBA 文字列の結合で教えてください

    また、お世話になります。 前に下のような質問をさせていただき、うまくできました。今度は、文字列と、変数msとしたシートのS2の文字列 たとえば、 S2に2007年 とあるとして、 「2007年06月売上リスト」 と別ブックに保存したいのですが、先ほどご回答いただいたものを参考にさせていただいても答えをだませんでした。よろしくお願いします。 【前回の質問】 教えてください。msというシートのS2に文字列があり、それを新規ブックの名前にして、いま入れているフォルダの中に保存したいのですが、エラーになってしまいます。どこが間違ってますか? ActiveWorkbook.SaveAs (ThisWorkbook.Path & \ ms.Range("S2").Value) 答え ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & ms.Range("S2").Value

  • excel vbaで助けてください

    excel2000を利用しています。 ファイルA (sheet1-グラフデータ、sheet2-グラフ)が、あります。 Vbaで、このファイルシートをすべて選択して、コピーして、名前をつけて保存しています。 この時に、作られる ファイルB (sheet1-グラフデータ、sheet2-グラフ)ですが、グラフの元データが、ファイルAになってしまいます。 下記、記述をどのように修正すれば、ファイルBのグラフの元データを、ファイルAでなく、ファイルBにすることが出来るでしょうか。 ご教授お願いいたします。 Thisworkbook.Worksheets.Copy SaveFilePath = Application.GetSaveAsFilename(mypath,"ExcelFile(*.xls),*.xls") If SavefilePath <> "False" Then ActiveWorkbook.SaveAs Filename:=SaveFilePath Else End if

  • エクセルVBAでコピー

    エクセルVBAでのコピーについての質問です。 ブック1 とブック2があります。 ブック1 のSheet1 内にマクロ含むワークシートを 新規ブックにファイル名を指定して 下記のようなプログラムでコピーしようとすると (標準モジュール1の内容) Sub newfilesave() MsgBox "デスクトップの「○○」フォルダに控え○○_日付時間.xlsxファイルを生成します。" Sheets("受付仕分リスト").Copy ActiveSheet.Cells.Copy ActiveSheet.Cells.PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False ActiveSheet.Range("A1").Select 'マクロなしのエクセルデータとして名前を付け、ファイル形式も決めてデスクトップに日付を付けて保存する。。 ActiveWorkbook.SaveAs _ Filename:="C:\Users\user\Desktop\○○\○○_" & Format(Now(), "yyyymmdd_hhmm"), _ FileFormat:=xlOpenXMLWorkbook End Sub Sheet1 内にマクロの内容までコピーされてしまいます。 ブック1のレイアウトや書式などはそのままに マクロ部分だけを取り除いてコピーするには どのような流れでプログラムすればいいでしょうか? よろしくお願いします。

  • エクセルマクロ

    入力したワークシートを 新しいブックにコピーして保存するマクロを作成しました。 ただ下記の様に保管すると、 数式もそのまま元のエクセルファイルの数式を参照してしまいます。 下記のマクロをあまり変更しないで、 値貼付け(もしくは値貼付けしながら、新しいブックへコピー) するにはどの様に変更するといいでしょうか? よろしくお願いします。 'Sub newfilesave() Sheets("Sheet1").Copy '名前を付け、ファイル形式も決めてデスクトップに日付を付けて保存する。。 'ActiveWorkbook.SaveAs _ ' Filename:="C:\Users\xxxxx\Desktop\" & Format(Now(), "yyyymmdd_hhmm"), _ ' FileFormat:=xlOpenXMLWorkbook 'End Sub

  • vba 特定の複数シートを別ファイルで保存。

    ブック内にA,Bと2つのシートがあり、ボタンをクリックすると特定の回数、シートAの情報が新規作成されたシートCにコピーされ、シートCとシートBの2シートが別ファイルとして保存される。という動きを繰り返したいのですが、 新規生成されるシートCだけを別ファイルで保存することまでは出来たのですが、シートBが追加できず困っています。 Sub 分割() Dim cpy As Range Dim pst As Range Dim path 'ファイルパス path = ActiveWorkbook.path Dim CopyWorkBook Dim CopyWorkSheet1 Dim CopyWorkSheet2 Dim Position(2,2) 'ここにはシートCを作成する際の情報が入っている。 '新規シートCを作成してシートAからデータをコピー。 For i = 1 To 2 Step 1 'とりあえず2シート作成する。 Worksheets.Add(after:=Worksheets(Worksheets.Count)).Name = Position(i, 2) 'まずは、タイトル欄をコピー Worksheets("Sheet1").Activate Set cpy = Worksheets("Sheet1").Range("A2:Q2") Worksheets(Position(i, 2)).Activate Set pst = Worksheets(Position(i, 2)).Range("A2:Q2") pst.Value = cpy.Value '貼り付け End With 'シートを別名で保存 Set CopyWorkSheet1 = Worksheets(Position(i, 2)) Set CopyWorkSheet2 = Worksheets("シートB") CopyWorkSheet1.Copy ' CopyWorkSheet2.Copy ←これでシートBもコピーされるかと思いましたが、シートBが上書きされてしまう。 Set CopyWorkBook = ActiveWorkbook ActiveWorkbook.SaveAs path & "\" & Position(i, 2) & "xls", xlWorkbookNormal CopyWorkBook.Close Next End Sub 質問は2つあります。 (1)シートBも新規作成されたシートCと一緒に別ブックに保存したいのですが、どうすればいいでしょうか? (2)シートのコピーの動きがイマイチよくわかりません。 今の私の環境だと(ネットで調べた書き方ですが)、シートを別ブックにコピーする際、 Set CopyWorkSheet1 = Worksheets("シートA") CopyWorkSheet1.Copy Set CopyWorkBook = ActiveWorkbook となっていますが、Setで、コピー元のシートAの情報をCopyWorkSheet1にコピーしたあと、 CopyWorkSheeet1.Copy となっていますが、この意味がわかりません。 なぜ更にコピーしているのでしょうか?またこれで、別ブックにシートが追加されてる理由もわかりません。 また、この処理の後に、 Set CopyWorkBook = ActiveWorkbook と、ブックの情報をコピーしていますが、普通に考えると最初にブックの情報をコピーして別名のブックを生成しておく必要があるように思えるのですが、後でよい理由も分かりませんし、これだと、Activeのワークブックのシート情報も全部コピーされてしまう気がするのですが。。。 この辺が全然分かっていないので、解説頂けるか参考サイトを教えて頂けないでしょうか。 よろしくお願い致します。

  • VBA SaveAsでワークシートの指定する時

    以下は自動マクロで作成したものをちょっと変えたものです。 Sub Macro1() Sheets(1).Select Sheets(1).Copy ChDir "C:\" ActiveWorkbook.SaveAs Filename:="C:\Book2.xlsx", _ FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False Windows("Book2.xlsx").Activate ActiveWindow.Close End Sub 内容: 一番左のシートのみBook2.xlsxに保存する 疑問点: シートをコピーした後、SaveAsコマンドで保存する際に「コピーしたシートのみ保存する」ような記述が見られないことです。SaveAs自体が、コピーされたシートのみ保存すること前提のメソッドなのでしょうか? ちなみに、Sheets(1).Copyを削除するとブック全体を保存します。

  • VBAでエラーが出ます

    セルの値を変数に格納して、それをブック保存時に使いたいのですが上手くいきません。 Sub サンプルブック保存() Dim myfile As String myfile = workbooks("サンプル").Worksheets("sheet1").Cells(2, 9) workbooks.Add ActiveWorkbook.SaveAs Filename:="\\C:\フォルダ\" & myFile & ".xls" End Sub エラーメッセージは、 実行時エラー'1004': SaveAs'メソッドは失敗しました'_Workbook'オブジェクト と出ます。 非常に困ってます。 教えてくだされば幸いです。

専門家に質問してみよう