• 締切済み

シートの自動追加を新規ブックで実行したい

こんばんは。 いつもお世話になっています。 営業月報を作成したいと思い、色々お知恵を借りながら試しています。 Sheet1:チームのメンバー表 Sheet2~3:名簿と目標値 Sheet4:月報の原版 このような構成のブックで、毎月Sheet1のメンバー表を書き換え(名簿ファイルから直接コピペでA1セルから下に向かってメンバーの名前)、 下記のマクロを実行してSheet4を複製しています。 今はこの追加を同じブック内で最後尾へどんどん追加しているのですが、複数のチームで共有する都合を考え、Sheet1にコピペしたメンバーの月報は新規ブックを自動で起こしてシートを追加したいと思っています。 ******************************* Sub シート追加() Dim 追加シート名 As String Dim i As Integer For i = 1 To Sheets("Sheet1").Range("a1").End(xlDown).Row 追加シート名 = Sheets("Sheet1").Cells(i, 1).Value Sheets("Sheet4").Copy After:=Sheets(Sheets.Count) Sheets("Sheet4" & " (2)").Name = 追加シート名 Next End Sub ******************************* 現在使用しているマクロはこのような内容なのですが、新規ブックでシートの追加をするには、どのようにすればよいのでしょうか? よろしく御教示をお願いします。

みんなの回答

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

こんばんは。 開発の立場からすると、順序立てる、というか、組み立てから考えないと、ここの掲示板では、話が途中手で頓挫しそうな気がします。 ある程度、コードを作っていない状態だと、私は、申し訳ないのですが、今の段階では手が付けられそうにもないですね。もうシステムになっているようです。 まず、ブックを探すところから始まりませんか? ブックがあったら、そこにメンバーのシートを入れていく。 ブックがなかったら、ブックを作って、メンバーのシートを入れていく。 2番目のメンバーは、そのブックの前のメンバーの次に入れていく。 など、きちんとした分岐を作らないと出来ません。

masurao200
質問者

お礼

遅くなりました。 すいません、アドバイスを頂きましたが私の説明が足りないようです。 もう少し勉強して、分からない場合は質問を投稿します。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 >新規ブックでシートの追加 というなら、単に、Sheet コピーすればよいです。 例: Worksheets("Sheet4").Copy で、新規のブックが作られます。 だから、 >Sheet1にコピペしたメンバーの月報は新規ブックを自動で起こしてシートを追加したいと思っています。 正確には、Sheetをコピーする場合は、シートを追加しているわけではありませんが。 ループしていますから、既に複製を作ったものは省かなくてはならないように思います。それを、どのように対処するのか、質問の中だけでは分かりません。同じブック内なら、省く方法はあります。 それから、シート名は変更できても、ブック名はどうするのでしょうか? キメウチでコードを書くというわけにはいきませんしね。

masurao200
質問者

お礼

回答ありがとうございます。 なるほど。 シートの重複、ブック名については考えが及びませんでした。 チームのメンバー表に使うSheet1のA列がメンバー名なので、B列にチーム名を入れたいと思います。ブック名はB1のセルということになります。 重複については、各チームごとに新規ブックで保存という方法で作りたいと思っていますが、月内でチームを変わる場合もありますので、既に作成した人間であっても実行毎に作成が可能にしたいと思っています。 よろしくおねがいします。

全文を見る
すると、全ての回答が全文表示されます。
  • xls88
  • ベストアンサー率56% (669/1189)
回答No.1

Sheet4のシート見出しを右クリック>移動またはコピー>コピーを作成>新しいブック>OK>名前を付けて保存 といった一連の作業を「マクロの記録」すればどうでしょうか。 Excel2007ですが、下記のようなコードが得られました。 Sheets("Sheet4").Copy ActiveWorkbook.SaveAs Filename:="D:\月報\月報ABC.xlsx", _   FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False

masurao200
質問者

お礼

早速の回答ありがとうございます。 説明が足りず、すいませんでした。 各Sheet間で下記のような動きをして、シートを自動コピーしています。 (1)まずSheet2の名簿からチームメンバー(毎月変わります)の名前をSheet1のA1から下に向かって(A2、A3・・・)コピペします (2)Sheet1のメンバー表には(1)を実行すれば、自動的にSheet3から目標値を拾って出勤シフトに合わせた目標を計算するよう式を入れています。 ※これが月報の数字となります。 (3)ここでマクロを実行(シート追加) (4)マクロによって、Sheet1のA列にあるメンバーの人数分のシートが同じブック内に自動で追加され、シート名はそのメンバーの個人名になります。月報の原板に入れた数式があるので(2)の個人別目標も自動で入ります。 このような流れです。 メンバーは流動的です。毎月変わります。1チームの人数制限はありません。チーム数も商品の種類と規模に合わせて多少・大小様々になるため、Sheet1~4が保存されているブックではなく、新しいブックでチームごとに保存したいと思い相談しました。 どうぞよろしくおねがいします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルVBAの質問 開いているもう一つのブックのシート名をすべて取得する方法

    おはようございます。 現在マクロを実行しているブックのシート名を下のようなコードで取得していますが、これを 開いているもうひとつのブックのシート名を マクロ実行しているシート“しーと1”のJ3セル以降に並べる というように変更したいのですが、下のコードを少し変更して 対応できるでしょうか?教えていただけたら助かります。 Sub シート名() Dim i As Integer Dim mySheetCnt As Integer Dim mySheetNam As String Application.ScreenUpdating = False Columns("J:J").Select Selection.ClearContents Range("J2").Select ActiveCell.FormulaR1C1 = "項目名" mySheetCnt = ThisWorkbook.Sheets.Count For i = 2 To mySheetCnt mySheetNam = Sheets(i).Name Sheets("しーと1").Cells(i, 10) = mySheetNam Next i Application.ScreenUpdating = True MsgBox "シート名更新しました。" End Sub

  • エクセルのブックを開いた時にマクロを自動定期に実行したいのですが。

    エクセル97でブックを開いたときに、自動的にマクロを実行させたいのですが、どのようにマクロを記述すればいいのか教えて頂けませんか。 sub autorun() sheets(2).select sheets(1).cells(2,2)=cells(5,5) end sub のように、シート2のある数値をシート1のセルに自動的に貼付したいのですが。 このマクロは自動的には実行されませんので、どうすれば自動的に実行するようにできるのかが知りたいのですが。 よろしくお願いします。

  • 他のブックから特定のシートを自ブックに取り込みたいのですが

    目的は月末に提出される従業員からの当月月報を簡便に集計する事前準備で、内容は、従業員が提出する月報.xlsの集積フォルダ「月報管理」に保存された複数の月報.xlsを個々に開き、就業時間が記載された対象sheetを予め作成した自ブック「月報管理.xls」にそれぞれコピーし、個々に開かれた月報.xlsを一括して閉じるまでの作業をマクロ化出来ないかということです。 初心者のため、こちらのようなサイトを多々巡り、途中までは必要部位を真似て作成したのですが、選択したシートを自ブックにコピーする段階で先に進めなくなりました。 恐れ入りますが、何方様かご教授いただけませんでしょうか? また、同様の作業を更に簡便なマクロに置き換えらても構いませんので、何卒、宜しくお願い致します。 参考までに、従業員が提出する月報は作成する際のマクロによってファイル名とsheet名を同一にしております。 例) Aさん*月分.xls 内に Aさん*月分sheet含む Bさん*月分.xls 内に Bさん*月分sheet含む Cさん*月分.xls 内に Cさん*月分sheet含む ↓ 自ブックに設定したマクロです ↓ Private Sub CommandButton1_Click() '1,ファイル名の取得 Dim myFolder As String 'ドライブ、フォルダ Dim filename As String 'ファイル名 myFolder = "C:\Documents and Settings\nobita\デスクトップ\月報集計" filename = Dir(myFolder & "\" & "*.xls") Do While filename <> "" filename = Dir() Loop '2,フォルダ内「月分」が含まれるファイルを開く Dim i As Integer With Application.FileSearch .NewSearch .LookIn = myFolder .filename = "*月分*.xls" .FileType = msoFileTypeExcelWorkbooks If .Execute() > 0 Then For i = 1 To .FoundFiles.Count Workbooks.Open filename:=.FoundFiles(i) Next Else MsgBox ("該当ファイルが見つかりません。") End If End With '3,開いたファイル内の共通対象シート(*月分*)を選択 Dim myWS As Worksheet For Each myWS In Worksheets If myWS.Name Like "*月分*" Then   If ActiveSheet.Name Like "*月分*" Then myWS.Select (False) Else myWS.Select End If End If Next '4,3で選択されたシートを自ブックにコピー '5,2で開いたファイルを閉じる End Sub

  • ワークシートをコピーしたい

    下記載のサンプルマクロは「ワークシートをコピーして、追加したワークブックにコピペする」マクロなんですが、これを「ワークシートをコピーして、追加したワークシートにコピペする」にできないでしょうか? 出来るのであれば、値と書式の他に関数もそのまま貼り付けたいので御教授お願いします。 ただマクロは削除してマクロ抜きのコピペが理想です。 宜しくお願い致します。 Sub サンプル() Dim sc As Integer sc = Application.SheetsInNewWorkbook Application.SheetsInNewWorkbook = 1 ThisWorkbook.Sheets("オリジナル").Cells.Copy 'コピー Workbooks.Add 'ブック追加 Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlValues '値貼り付け Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlFormats '書式貼り付け Sheets("Sheet1").Name = "コピー" Application.CutCopyMode = False Application.SheetsInNewWorkbook = sc ActiveWorkbook.Close ThisWorkbook.Activate End Sub

  • ブック間のシート移動

    EXCEL VBA初心者です。 ブックAのシートAをブックBのシートの一番左側に移動させようと思います。 以下を実行するとエラーが出ますがなぜでしょうか? エラーの原因と対策方法を教えて下さい。 Sub シート移動() Worksheets("シートA").Move _ Before:=Workbooks("ブックB.xls").Sheets(1) End Sub ブックAはブック名が毎回変わります。 ブックAはメール添付を開いたブックです。 ブックAはシートがシートAしかありません。 シートAは名前が変わりません。 マクロコードはブックBあるいは個人用マクロブックに置きます。 よろしくお願いします。

  • Excelマクロの自動実行で新規ブックを保存せずに表示したい

    以下のようなマクロを作成しました。 これを、TEST.xls として保存し、サーバに登録しました。 これをwebサイトで <a href="TEST.xls">実行する</a> のようにして ダウンロードし実行しても、strNEWBKNM が表示されずに終了してしまいます。 auto_open をやめて、ダウンロード後に「ツール」→「マクロ」でマクロを実行すると strNEWBKNM が表示された状態で終了するのですが、 auto_open でも strNEWBKNM が表示された状態で終わらせたいです。 (保存はしたくありません。あくまで表示で終わらせたいです) どのようにしたらよいか、お分かりになる方がいらっしゃいましたら 教えてください。よろしくお願いします。 Sub auto_open() Dim strWKBKNM As String 'このブック名 Dim strNEWBKNM As String '新しいブック名 strWKBKNM = ThisWorkbook.Name '*** このブックの名前を設定 Workbooks.Add '*** 新しいブックを追加 strNEWBKNM = ActiveWorkbook.Name '*** 新しいブックの名前を設定 Sheets("Sheet1").Activate Range("A1") = "aaaaaa" Workbooks(strNEWBKNM).Activate Workbooks(strWKBKNM).Close SaveChanges:=False End Sub

  • シートを追加したときにタイトルの連番も自動で

    WindowsXP EXCELL2003 いつも御世話になります。 納品書と請求書が一緒になった 「納請書」 がブックには3シートを用意しています。 受注が追加されるごとにこの「納請書3」のコピーとして追加します。 図で言うと「納請書4」という具合にです。 この場合 「納請書3」のコピーですからタイトルは B3 納品書(3) B32 請求書(3)   となりこれを B3 納品書(4) B32 請求書(4) と自動的に変えられる方法はないでしょうか。 可能ならばご指導いただけませんでしょうか。 ※現在は 入力規則 でその都度、手動で対応していますが結構変更ミスが多く防止をしたいためです。 シートのコピーのマクロは以下です。 Sub シートの追加() Dim NewNo As Integer NewNo = Sheets("月請求書").Index Sheets("納請書3").Copy Before:=Sheets("月請求書") ActiveSheet.Name = "納請書" & NewNo End Sub

  • マクロ シートの順番を認識してシートをアクティブに

    シート名に反応して、シートをアクティブにするマクロは分かるのですが、 シートの順番を元に、アクティブにするマクロを実行したいです。 例えば、 1枚目のシートに あああ、2枚目のシートに いいい、3枚目のシートに ううう と名前を付けているブックがあるとして、あああ のシートをアクティブにしたいとき、 Sub あああ のシートをアクティブにする() Sheets("あああ").Activate End Sub としたいわけではなく、「1枚目だからアクティブにした」 といったマクロを実行したいと思っています。

  • Excel マクロ 他ブックのシートの範囲選択した内容を別ブックのシートにコピーする方法

    他ブックのシートの範囲を選択しコピーした内容を、別ブックのシート に貼り付けするマクロを作成しています。 現在の情報であれば、下記のマクロで解決できます。 Sub Test1() Dim myCellall As Range Dim myCellsom As Range Dim myCelluri As Range   Set myCellall = Sheets("すべて").Range("A1") Set myCellsom = Sheets("総務").Range("A1") Set myCelluri = Sheets("売上").Range("A1") With Workbooks.Open("\") .Worksheets("すべて").Range("A1:K17").Copy myCellall .Worksheets("総務").Range("A1:K88").Copy myCellsom .Worksheets("売上").Range("A1:K81").Copy myCelluri .Close False End With End Sub ただ、他ブックのシートのデータは変動するため、行と列の変更を行わなければいけません。行と列の増減があっても、自動的に対応できるマクロを書きたいと思います。 どのようなマクロを追加すればよろしいでしょうか。 よろしくお願いいたします。

  • エクセルでシート名でソート

    エクセルのシートをシート名でソートしたいのですが、VBAで以下の様な条件で出来るのでしょうか。 ・シートは必ず5枚以上で、最大70枚です。 ・シート名は、半角英数字、漢字を使用しています。 ・ソートの順は、1文字の「0~9」→「A~Z」→「0_0~9_Z」→「A_1~Z_Z」の順になります。 ・シートの一番左端と右端3シートは並び替えしない(漢字名シート)。 例(ソートするシート) 0→4→5→F→0_1→0_9→4_1→5_4→5_5→F_5 「シートの並び替え」で検索してみましたら以下のサンプルが 有りましたので少し変更してみました。 ********************* Sub MoveSamp1() Dim i As Long Dim j As Long For i = 2 To Sheets.Count - 3 '---最初から最後の3つ前のシートまで For j = i + 1 To Sheets.Count '---i番め以降のシート全て If Sheets(i).Name > Sheets(j).Name Then '---シート名の比較 Sheets(j).Move Before:=Sheets(i) '---(1)シートの移動 End If Next j Next i End Sub ********************************************************** 結果 0→0_1→0_9→4→4_1→5→5_4→5_5→F→F_5 上手くいきませんでした。 他の方法として   ブック追加、シート名をセルに書き出し、セルとシート名比較、シート移動、ブック削除 なども試してみましたがダメでした。 シート名が数字ならば行くようですが。  エクセルは2003~2010で考えています。 すみませんが良いお知恵をお貸しくださいませんか。

専門家に質問してみよう