VBA

【VBA:一行で書けますか?】シートの追加、名前の変更方法(Addメソッド,Nameプロパティ)ブックの追加、保存の方法(Addメソッド、SaveAsメソッド)

記事内に商品プロモーションを含む場合があります

このページでわかること

新規ブック、新規シートを一行で追加、名前の変更を行うことができます。

覚えること
  1. ブック、シートの追加はAddメソッド
    戻り値はそれぞれワークブックオブジェクト、ワークシートオブジェクト
  2. 一番後ろにシートを追加するには
    Worksheets.Add After:=Worksheets(Worksheets.Count)
  3. シートを一行で追加、名前の変更
    Worksheets.Add(before:=ワークシートオブジェクト).Name = “サンプル”
  4. ブックは名前の変更ではなく、保存を行う。
    Workbooks.Add.Saveas パス名 & ファイル名

こんにちは、hokkyokunです。
シートやブックを新規作成する機会は多いと思います。
できれば、こういった処理をする場所を作る、お膳立て系のコードはすっきりさせたいですよね。
(自分で言っててなんだけど、何だお膳立て系って。。。)

一行で追加して名前を変えてみようと思います。

ブック、シートの追加はAddメソッド

ブックの追加

構文:Workbooks.Add([Template])

戻り値はワークブックオブジェクト
引数Templateは指定のブックをテンプレとして使うことが出来ます。

注意すべきはWorkbooksであること。
AddメソッドはWorkbooksコレクションのメソッドです!

コレクションとオブジェクトの関係ですが、
オブジェクトは対象の物単体を指します。
これに対し、コレクションはオブジェクトの集まりのことを言います。

“売上.xlsx”とか”勤怠管理.xlsx”とかは単体ではオブジェクトといいますが、
これらのブックを全て指すときはコレクションといいます。

普段は意識しなくても大丈夫ですが、

  • For each 文を使ってワークブック全てに処理するとき
  • Addメソッドのようにオブジェクトとコレクションで用意されているメソッド・プロパティが違うとき

は注意してください。

シートの追加

構文:Worksheets.Add([Before],[After],[Count],[Type])

こちらもワークシートコレクションです。WorksheetsとSをつけることを忘れないようにしてください。

引数で重要なのはBeforeとAfterです。
それぞれシートの追加する位置を前か後ろかに指定できます。

よく使う構文として
一番後ろにシートを追加したいとき

Sub test()
Worksheets.Add after:=Worksheets(Worksheets.Count)
End Sub

これで追加できます。

Addメソッドは戻り値がある

とても重要なことです。
Addメソッドには戻り値があります。
それぞれワークブックオブジェクト、シートオブジェクトを返してくれます。

何が重要化というと、その後にプロパティを続けて書くことが出来るのです。
つまり、一行でさらに処理を書くことが出来ます。

お膳立て系(まだ言う)は大体書くことが一緒で、
もっと重要な処理にコード量をとりたいですよね。

簡単に書くことで、メンテナンスしやすくなります。

ここではブック、シートの追加と名前の変更を一行で行ってみたいと思います。

シートの追加と名前変更

シートは簡単です。
Worksheets.Addメソッドの戻り値がシートオブジェクトなので、そのままNameプロパティで変更すれば大丈夫です。

Sub test()

Worksheets.Add(before:=Worksheets(1)).Name = "サンプル"

End Sub

これで処理できます。
簡単だし、かっこいいし、すっきりするし。いいことづくしです。

ブックの追加と名前の変更(単純じゃない)

ブックの場合は単純じゃないです。
シートと同じ感じで書いてみましょう。

Sub test()
'これはダメ
Workbooks.Add.Name = "サンプル"

End Sub

エラーが発生してしまいました。

ブックの名前を変更するにはNameプロパティを使うのでなく、
SaveAsメソッドを使って保存の名前を変える必要があります。

Sub test()

Workbooks.Add.Saveas ThisWorkbook.Path & "\サンプル.xlsx"

End Sub

こんな感じで書けばブックを追加して、名前を変更、おまけに保存もできました。
これができるとかなりかっこいいマクロになると思います!!!

まとめ

構文
Workbooks.Add([Template])
Worksheets.Add([Before],[After],[Count],[Type])

シートの追加と名前の変更
Worksheets.Add(before:=ワークシートオブジェクト).Name = “サンプル”

ブックの追加と名前の変更(ブックの場合は保存)
Workbooks.Add.Saveas パス名 & ファイル名

いかがでしょうか。
一行で書くというのは、どうでもいいようで、結構大事です。

マクロは俗人化しやすいといわれています。
余計なお世話といいたいところですが、
自由度が高く、使う人のハードルが低い分、一理あります。
対策はしましょう。

対策は何といっても

  • コードを見やすく
  • コード量を少なく

です。

ですので、VBAを書くことに慣れてきたら、
一行で書くことにチャレンジしてみてください。
コード量が少なければメンテナンスしやすくなり、
引き継いでも次の人が読める人なら使ってくれるはずです。

ではでは。