- ベストアンサー
Excel マクロによる新規ブック作成について
Excelで質問です。 ボタンをクリックすると新規ブックを作成するようにしたいのですがうまくいかず・・・。何かいい方法はないでしょうか。よろしくお願いします。 Sub ボタン_Click() Workbooks.Add.SaveAs Filename:="C:\temp\1-50.xls" End Sub にてブックを作成することは出来るのですが、その作成したExcelのシートの数を50個にし、さらにそのシートに「1」から「50」というシート名を付けたいのですが不可能でしょうか。 よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
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だとエラーになりますし、文字など整数以外の値が入っていてもエラーになります。) 個人で使う分には間違えないように入力すればいいかと思いますが。
その他の回答 (4)
- hana-hana3
- ベストアンサー率31% (4940/15541)
>シート名やブック名を変更することは可能ですか? 簡単ですよ。 (エラーチェックしていません。) 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 >既存のブックの内容をコピーするということは可能なのでしょうか? ブックを丸ごとコピーするなら、一端開いてから別名保存が一番簡単でしょう。 特定のシートをコピーする事も可能です。 マクロの記録を使って手動で操作したコードを確認し、ヘルプやネットを使ってコードの動作を勉強して下さい。
お礼
ありがとうございます。 マクロって便利ですね。まだまだですがこれから勉強していってみます。
- shut0325
- ベストアンサー率40% (490/1207)
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)すると考えてはどうでしょう?
補足
ありがとうございます。 『ST=開始番号が入ったセルの値 ET=終了番号が入ったセルの値』 というのは入力可能なのでしょうか? マクロの中で書き込むというより、作成しているボタンの横とかに入力フォームを作成しそこに開始番号、終了番号を入力しボタンを押すと作成されるというような・・・。 初心者のため分からないことが多いですがお願いします。
- shut0325
- ベストアンサー率40% (490/1207)
下記などどうでしょう? ループはどのみち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
お礼
ありがとうございました。 少しずつ勉強しながら作成してみようと思います。
- hana-hana3
- ベストアンサー率31% (4940/15541)
新規ブックに対してシート名の変更と追加を行えば良いだけです。 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
補足
早速のご解答ありがとうございます。マクロのすばらしさを痛感しました。 今回は「1-50」だったのですが「51-100」、「101-150」などのようにシート名やブック名を変更することは可能ですか?マクロで書き込むというよりも開始番号と終了番号を入力しボタンを押すとその入力した番号のシートができるというような・・・。 また、新規ブックですのでシートの中身は空白なのですが、既存のブックの内容をコピーするということは可能なのでしょうか?
お礼
ありがとうございます。教えていただいた通り簡単に変数に値を入れることが出来ました。これから猛勉強してみます。