• ベストアンサー

Excel マクロによる新規ブック作成について

Excelで質問です。 ボタンをクリックすると新規ブックを作成するようにしたいのですがうまくいかず・・・。何かいい方法はないでしょうか。よろしくお願いします。 Sub ボタン_Click() Workbooks.Add.SaveAs Filename:="C:\temp\1-50.xls" End Sub にてブックを作成することは出来るのですが、その作成したExcelのシートの数を50個にし、さらにそのシートに「1」から「50」というシート名を付けたいのですが不可能でしょうか。 よろしくお願いします。

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

  • ベストアンサー
  • shut0325
  • ベストアンサー率40% (490/1207)
回答No.4

No.2です。 可能です。 たとえば 開始番号がセルのB1、終了番号がB2に入れてあるとします。 そうすると、 ST=Range("B1").Value ET=Range("B2").Value とすれば値が変数に格納されます。 これがユーザーフォームの場合、 2つテキストボックスをフォーム内に作成し、 そのテキストボックスの値を変数に格納したい場合は、 ST=TextBox1.Value ET=TextBox2.Value というような記述でよいです。 要は オブジェクト名 + .Value で オブジェクトの値を取得すると思ってください。 これは「プロパティ」といわれるものです。 似たような記述で、オブジェクト名 + .add などがありますが、こちらは 「メソッド」と呼ばれ、オブジェクトに何か処理を与えるものと思ってください。 プロパティやメソッドはオブジェクト毎に異なります。 詳しく知りたい場合は、エクセルのヘルプ→Excel VisualBasicリファレンス の中の、「オブジェクトおよびコレクション」を見てください。 テキストボックスやボタンなどのオブジェクト名を知りたい/変更したい場合は、そのオブジェクトを選択した状態で(VBE上です)左にある、「プロパティ」タブの「オブジェクト名」を見てください。 今回のコード群にはミスよけ、エラー処理等は施していません。その辺はまたじっくり勉強してください。(たとえば開始番号150 終了番号100だとエラーになりますし、文字など整数以外の値が入っていてもエラーになります。) 個人で使う分には間違えないように入力すればいいかと思いますが。

fcb7arg9
質問者

お礼

ありがとうございます。教えていただいた通り簡単に変数に値を入れることが出来ました。これから猛勉強してみます。

その他の回答 (4)

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.5

>シート名やブック名を変更することは可能ですか? 簡単ですよ。 (エラーチェックしていません。) Sub test2() Dim i As Integer Dim in1 As Integer, in2 As Integer Dim Fname As String Dim Ws As Worksheet in1 = InputBox("開始番号") in2 = InputBox("終了番号") If in1 > in2 Then Exit Sub Fname = in1 & "-" & in2 & ".xls" Workbooks.Add.SaveAs Filename:="C:\temp\" & Fname Workbooks(Fname).Activate Do While (in2 - in1) >= Worksheets.Count Worksheets.Add after:=Worksheets(Worksheets.Count) Loop i = in1 For Each Ws In Worksheets Ws.Name = i i = i + 1 Next End Sub >既存のブックの内容をコピーするということは可能なのでしょうか? ブックを丸ごとコピーするなら、一端開いてから別名保存が一番簡単でしょう。 特定のシートをコピーする事も可能です。 マクロの記録を使って手動で操作したコードを確認し、ヘルプやネットを使ってコードの動作を勉強して下さい。

fcb7arg9
質問者

お礼

ありがとうございます。 マクロって便利ですね。まだまだですがこれから勉強していってみます。

  • shut0325
  • ベストアンサー率40% (490/1207)
回答No.3

No.2です。すでに回答されていしたね。 回答への補足にある番号の件は可能です。 仮にセルに開始番号、終了番号があったとすれば、 ST=開始番号が入ったセルの値 ET=終了番号が入ったセルの値 とし、 私のコードのうち、下記の部分を以下のように変えます。 'シートを必要分追加 For i = Sheets.Count + 1 To ET-ST+1 Sheets.Add Next 'シートの名前変更 For i = 1 To Sheets.Count Sheets(i).Name = ST-1+i Next といった具合です。 既存のブックのコピーは(既存のブックを)開いて別名保存(SaveAs)すると考えてはどうでしょう?

fcb7arg9
質問者

補足

ありがとうございます。 『ST=開始番号が入ったセルの値  ET=終了番号が入ったセルの値』 というのは入力可能なのでしょうか? マクロの中で書き込むというより、作成しているボタンの横とかに入力フォームを作成しそこに開始番号、終了番号を入力しボタンを押すと作成されるというような・・・。 初心者のため分からないことが多いですがお願いします。

  • shut0325
  • ベストアンサー率40% (490/1207)
回答No.2

下記などどうでしょう? ループはどのみち2回必要なので、シート追加/名前変更とでわけました。 新規ブックはデフォルトで複数のシートがあるので、それを差し引いた分だけシートを追加するようにしてあります。 少しずつ改良して好みのマクロを作成されてください。 (例:シート数が指定できる、書類名を変えられる等) Sub ボタン_Click() Dim Snum, i As Integer '新規ブック追加 Workbooks.Add 'シートを必要分追加 For i = Sheets.Count + 1 To 50 Sheets.Add Next 'シートの名前変更 For i = 1 To Sheets.Count Sheets(i).Name = i Next 'シートの保存 ActiveWorkbook.SaveAs Filename:="C:\temp\1-50.xls" End Sub

fcb7arg9
質問者

お礼

ありがとうございました。 少しずつ勉強しながら作成してみようと思います。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

新規ブックに対してシート名の変更と追加を行えば良いだけです。 Sub test() Dim i As Integer Dim Ws As Worksheet Workbooks.Add.SaveAs Filename:="C:\temp\1-50.xls" Workbooks("1-50.xls").Activate i = 1 For Each Ws In Worksheets Ws.Name = i i = i + 1 Next For i = Worksheets.Count + 1 To 50 Worksheets.Add after:=Worksheets(Worksheets.Count) Worksheets(Worksheets.Count).Name = i Next End Sub

fcb7arg9
質問者

補足

早速のご解答ありがとうございます。マクロのすばらしさを痛感しました。 今回は「1-50」だったのですが「51-100」、「101-150」などのようにシート名やブック名を変更することは可能ですか?マクロで書き込むというよりも開始番号と終了番号を入力しボタンを押すとその入力した番号のシートができるというような・・・。 また、新規ブックですのでシートの中身は空白なのですが、既存のブックの内容をコピーするということは可能なのでしょうか?

関連するQ&A

  • エクセルマクロでブック作成

    新規ブックを作成したいのです。 Sub aaa() Workbooks.Add.SaveAs Filename:="C:\temp\aaa.xls" End SubEnd Sub これで出来るのですが、保存場所が問題なんです。 上記だとC:\temp\ですね。 いろいろな環境で使うので保存場所を「 this wookbook のあるフォルダ」に指定したいのですが、出来ますでしょうか? よろしくお願いします。

  • Excelマクロで同じブックにCSVを読み込むには

    Excelの指定したシートにCSVファイルを読み込ませたいのですが 以下のVBAマクロを実行すると新しいブックが起動して 新しいブックの方にCSVファイルが読み込まれてしまうのですが これをVBAマクロを実行しているブックの指定のシート(例えばSheet3など)に 読み込ませたいのですがどのように記述すればよいのでしょうか。 よろしくお願いします(Excel2010) Sub Macro1()  ChDir "C:\test"  Workbooks.Open Filename:= "test1.csv" End Sub

  • Excelマクロ(VBA)のブックとシートのコピーについて

    初めまして、宜しければVBAのブックやシートのコピー(操作)についてご教授お願いいたします。 Windows XP x64 OFFICE2003 を使用しております。 D:\Book1.elxのsheet1のシートをD:\test\Book2.elxのsheet1のシートに コピーする方法が恥ずかしながら理解できておりません。 以下が行いたい事です。 Sub ボタン1_Click() 'text1ブックを開く 'Workbooks.Open "D:\micro\test1.xls" 'ブック間のシートをコピー Workbooks("test2.xls").Worksheets("シート2").Copy _ After:=Workbooks("test1.xls").Worksheets("Sheet2") End Sub VBのファイル操作とは違い、どのように行えば良いのか検索しても同じような部分サンプルのようなものしか無く、理解できておりません。 参考でも結構ですのでご教授いただけませんでしょうか? よろしくお願いいたします。

  • エクセル 別のエクセルの特定のシートを開きたいのですが

    宜しくおねがいします。 現在、エクセルで 下記のようなVBAを使用しております。 Private Sub CommandButton1_Click() Workbooks.Open Filename:="テスト.xls" End Sub テストのエクセルのSheet2を開きたい場合はどうすれば よろしいのでしょうか? 教えて下さい。宜しくお願い致します。

  • <新規Bookに アクティブセル領域を 値で貼り付けるマクロ>

    <新規Bookに アクティブセル領域を 値で貼り付けるマクロ> 沢山の様々なデータが入力されている、巨大なExcelファイル(仮に「管理表.xls」)があるのですが ボタンを押すと、アクティブなセル領域(ドラッグで選んだセル領域)を 新規Bookに値で貼り付ける マクロを作成したいのにうまく動きません 下記コードだと、新規Book作成までは出来るのですが、 ペーストがされません。クリップボードにはデータが入るのですが 「管理表.xls」を全て選択された情報が入ってしまっています。 (ペーストすると 全データがペーストされる) マクロは始めたばっかりで ものすごく初心者なので恐縮なのですが ご教授ください。よろしくお願いします。 --------------------------------------- Private Sub CommandButton2_Click() Selection.CurrentRegion.Copy 'アクティブセル領域をコピー Workbooks.Add.Activate 'ブックを新規作成してアクティブに Range("A1").PasteSpecial Paste:=xlPasteValues End Sub ---------------------------------------

  • ブックの終了がうまくいきません

    Excel2003 でマクロ作成中の超初心者です。マクロ完成まであと一歩になりました。次から進みません。お願いします。 ブックA ブックB ブックCの3個のブックがあります。 ブックAのコマンドボタン→ ブックBに飛びます。 ブックBには、フォームコントロール(終了するコマンドボタン)と、特定セルにコントロールが張り付けてあります。 ブックA→ブックBの終了ボタン →正常に終了します。 ところが、ブックBのコントロールから、ブックCに移り、 ここからも一度ブックBに戻って終了ボタンを押すとBブックは終了するものの、Cブックが閉じられません。なぜでしょうか? -----Bブックのセルに貼り付けたコントロールのマクロ----- Sub ブックCへ() Application.ScreenUpdating = False Dim wb As Workbook On Error Resume Next '開いて作業中の場合。 Set wb = Workbooks("21年計算01.xls") On Error GoTo 0 If wb Is Nothing Then Set wb = Workbooks.Open(ThisWorkbook.Path & "\21年計算01.xls") End If '開いて作業中の場合。 Workbooks("21年計算01.xls").Activate ActiveWindow.WindowState = xlMaximized - ---最大化 Worksheets(12).Select End Sub -----Bブックのフォームコントロールのマクロ----- Private Sub CommandButton5_Click() Unload Me ActiveWorkbook.Close SaveChanges:=True End Sub -----Cブックのフォームコントロールのマクロ----- Private Sub データ入力_Click() Unload Me Application.ScreenUpdating = False On Error GoTo err: Workbooks("21年計算02.xls").Activate Exit Sub err: Workbooks.Open Filename:=ThisWorkbook.Path & "\21年計算02.xls" '''データ処理.Show Application.ScreenUpdating = True End Sub

  • ExcelVBA ブック全データを別ブックにコピー

    お世話になります。 自分のPC環境のC:\test\配下にある"練習.xls"というブックがります。 ボタンが押された時にこのブックの全データをデスクトップにある"集計.xls"のA1から張り付けたいのです。 あるサイトで下記のようなロジックが公開されていましたので、ファイル名を変えて実行しましたが 下記★箇所で"インデックスが有効範囲にありません"とエラーが出てしまいます。 どなたか改善方法をご教授いただけませんでしょうか? よろしくお願い致します。 環境 windows XPSP3  Excel2003 Sub ボタン1_Click() Dim a As Variant Dim b As Variant Workbooks.Open Filename:="C:\test\練習.xls" ★Set a = Workbooks("\C:\test\練習.xls").Worksheets("sheet1").UsedRange Set b = Workbooks("集計.xls").Worksheets("sheet1").Range("A1") a.Copy (b) Set a = Nothing Set b = Nothing End Sub

  • Excel VBAについて

    Excelのシートにコマンドボタンを配置して、そのコマンドボタンをクリックすると「ファイルを開く」のダイアログボックスを表示したいと思っています。 そのとき、デフォルトでファイルの場所は「D:\Test」にしたいのですが、どうしたらよいのでしょうか。 ユーザは、ファイルの場所を探さずに、コマンドボタンをクリックしたら開きたいファイル名を指定するだけでいいようにしたいのですが。 下記では、ファイルを開くダイアログは表示されるのですが、ファイルの場所を毎回探さなくてはいけません。 どなたかご教授下さい。 Private Sub Cmd_ファイル選択_Click() Dim FileName As Variant FileName=Application.GetOpenFileName("Microsoft Excelブック,*.xls") Workbooks.Open OpenFileName End Sub

  • 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'オブジェクト と出ます。 非常に困ってます。 教えてくだされば幸いです。

  • Excel VBA ブックが閉じれない

    Excel2016を使用してVBAを使用しています。 VBA初心者ですが、よろしくお願いします。 質問内容は以下になります。 EXCEL起動と同時にUserFormを表示させ、UserForm上のコマンドボタンから ダイアログボックスを表示し、他ブックを開く処理なのですが、 他ブックを開くまでは問題ないのですが、他ブックが閉じれない状態になります。 Private Sub Workbook_Open() UserForm1.Show End Sub Private Sub UserForm_Initialize()  各種処理 End Sub Private Sub CommandButton1_Click() Dim OpenFileName As String SetCurrentDirectory (Worksheets(1).Cells(11, 3)) OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls?") Workbooks.Open OpenFileName End Sub UserFormを閉じると開いたブックも閉じることが可能です。 タスクマネージャーから強制的に終了しようとすると、以下メッセージが出ます。 ”開いているダイアログボックスがあるため、Microsoft Excel を終了できません。[OK]をクリックしてから、Microsoft Excelに切り替えてダイアログを閉じて下さい。" UserFormを閉じないで他ブックを閉じるには、どうすれば宜しいでしょうか。 申し訳ございませんがご教授下さい、よろしくお願いいたします。