【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集

Excelで質問です。
ボタンをクリックすると新規ブックを作成するようにしたいのですがうまくいかず・・・。何かいい方法はないでしょうか。よろしくお願いします。


Sub ボタン_Click()
Workbooks.Add.SaveAs Filename:="C:\temp\1-50.xls"
End Sub

にてブックを作成することは出来るのですが、その作成したExcelのシートの数を50個にし、さらにそのシートに「1」から「50」というシート名を付けたいのですが不可能でしょうか。
よろしくお願いします。

A 回答 (5件)

新規ブックに対してシート名の変更と追加を行えば良いだけです。



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」などのようにシート名やブック名を変更することは可能ですか?マクロで書き込むというよりも開始番号と終了番号を入力しボタンを押すとその入力した番号のシートができるというような・・・。
また、新規ブックですのでシートの中身は空白なのですが、既存のブックの内容をコピーするということは可能なのでしょうか?

補足日時:2007/08/22 09:25
    • good
    • 0

下記などどうでしょう?


ループはどのみち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
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/08/22 09:58

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

補足日時:2007/08/22 10:01
    • good
    • 0

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だとエラーになりますし、文字など整数以外の値が入っていてもエラーになります。) 個人で使う分には間違えないように入力すればいいかと思いますが。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/08/24 01:11

>シート名やブック名を変更することは可能ですか?



簡単ですよ。
(エラーチェックしていません。)

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

>既存のブックの内容をコピーするということは可能なのでしょうか?

ブックを丸ごとコピーするなら、一端開いてから別名保存が一番簡単でしょう。
特定のシートをコピーする事も可能です。
マクロの記録を使って手動で操作したコードを確認し、ヘルプやネットを使ってコードの動作を勉強して下さい。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/08/24 01:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!