• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルVBAについて)

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

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

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

  • ベストアンサー
  • 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

専門家に質問してみよう