【脱エクセルVBA初心者】新規のワークブックを作成、シートのコピーと名前の変更


みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

以前、初心者向けVBAということで、「請求データ一覧から請求書を自動で作成する」を目的とした連載記事を公開しました。

こちらの記事から始めるシリーズです。

【初心者向けエクセルVBA】データ一覧から請求書を自動で作る
初心者向けVBAの実用的な使い方について、請求データ一覧から請求書を自動で作成するを目標に進めます。初回はWorksheetオブジェクト、Rangeオブジェクトと、セルの値の操作についてお伝えします。

おかげさまで「請求書を自動で作る」というニーズはとても多いようで、たくさんの方にご覧いただいています。

そこで、「請求書を自動で作る」際に他にも便利な機能やテクニックが山ほどありますので、脱エクセルVBA初心者向けということでシリーズで紹介していきたいと思います。

初回の今回は、エクセルVBAで新規のワークブックを作成して請求書ひな形シートをコピーする方法です。

また、合わせてワークシートのシート名を変更する方法、またThisWorkbook、ActiveWorkbook、ActiveSheetに関するちょっとしたTIPSについてもお伝えしますよ。

では、改めてよろしくお願いします!

スポンサーリンク

各種請求に関するデータとひな形を準備

では、使用していく各種データとひな形について紹介します。

今回作成していく「請求書作成.xslm」は

  1. 請求書ひな形
  2. 請求データ
  3. 取引先マスタ

の3つのシートから成ります。

それぞれ説明をしていきますね。

請求データ

まず請求データシートです。

エクセルの請求データ

納品が完了した品目についてこのフォーマットに、納品日、取引先名、品目、単価、数量、価格を記録していきます。このデータが各取引先向けの請求書を作成するための元データになりますので、間違えないように…。

取引先マスタ

次に取引先マスタです。

エクセルの取引先マスタ

請求書に載せる取引先名と郵便番号、住所をリストをしています。

最終的には、ここに記載している取引先の分だけ請求書ファイルを作成していきますので、この例では「ABC株式会社」「株式会社ホゲホゲ」の二社分を作成することになります。

請求書ひな形

こちらが請求書ひな形シートです。

エクセルの請求書ひな形

やたら長いですが、最大30品目まで入力できるようになっていて、使用しない行は非表示にする処理を追加しますのでご安心下さい。

請求書作成プログラムの流れ

今回作成したい請求書作成プログラムの流れについてですが、大まかには

  1. 取引先マスタの取引先の分だけ新規ブックを作成しそこに請求書ひな形シートをコピーする
  2. コピーしたシートの名称を「請求書ひな形」から「請求書」に変更する
  3. 各社の「請求書」シートに「請求データ」から該当のデータを抜き出して転記する
  4. 各社の「請求書」シートに「取引先マスタ」から必要な項目を転記する
  5. 各社の「請求書」シートの不要な行を非表示にするなど表示を調整
  6. 各社の「請求書」シートをPDF形式で保存する

というような流れで進めていく予定です。

新規ブックを作成して請求書ひな形シートをコピーする

まず今回は上記の流れの1,2まで。新規ブックを作成して、そこに請求書ひな形シートをコピーして、そのシート名を変更する、というところまでです。

その部分だけプログラムを作成してみますと、こちらのようになります。

Sub wsCopyNewBook()

    Dim wsInvoice As Worksheet '「請求書ひな形」シート

    Workbooks.Add '新規ワークブックを作成
    ThisWorkbook.Worksheets("請求書ひな形").Copy before:=ActiveWorkbook.Sheets(1) '新規ワークブックのsheet1の前にひな形をコピー

    Set wsInvoice = ActiveSheet 'コピーしたシートを変数にセット
    wsInvoice.Name = "請求書" 'シート名を変更

End Sub

意外と短いですね。

以下解説をしていきます。

Addメソッドで新規ワークブックを作成

新規ワークブックの作成ですが、簡単です。

Addメソッドを使って

Workbooks.Add

これでOK。新しいブックが作成されます。また重要なのは、新たに作られたブックが常にアクティブになりますので、覚えておいてください。

ThisWorkbookとActiveWorkbookは何が違うのか

ThisWorkbookActiveWorkbookはともに特定のワークブックを指定するときに非常に便利ではあるのですが、それぞれどう違うのか混乱するときがあるかも知れません。

一回整理しておきましょう。

ThisWorkbook:現在動作しているVBAプログラムが仕込まれているワークブック
ActiveWorkbook:現在アクティブになっているワークブック

と、このような違いです。

一般的にThisWorkbookはVBAプログラムがどのような動作をしようとも、別のワークブックを指すことはないんですね。ずっと同じブックです。

一方でActiveWorkbookはアクティブになっているワークブックを指しますから、前述のように新たに作成したワークブックや

Workbookオブジェクト.Activate

などとすると、指定したワークブックがアクティブになります。

Copyメソッドでワークシートをコピーする

ワークシートをコピーする場合はCopyメソッドを使って

Worksheetオブジェクト(コピー元).Copy before:=Worksheetオブジェクト(コピー先)

とします。

この場合、Worksheetオブジェクト(コピー先)の前にコピーしたシートが追加されます。

Worksheetオブジェクト(コピー先)の後ろにコピーしたシートを追加したい場合は

Worksheetオブジェクト(コピー元).Copy after:=Worksheetオブジェクト(コピー先)

とします。

今回の例の場合は

ThisWorkbook.Worksheets("請求書ひな形").Copy before:=ActiveWorkbook.Sheets(1) '新規ワークブックのsheet1の前にひな形をコピー

とあります。新規に作成したワークブックには「Sheet1」というシートが自動で作られていますので、その前にコピーしたシートを挿入するという形です。

ActiveSheetをSetする

そして、もうお気づきだと思いますが、コピーして新しくできたシートはアクティブなシートになりますので

Set オブジェクト変数 = ActiveSheet

とすることで、簡単にオブジェクト変数にセットできます。

これを知らないと

Set wsInvoice = ActiveWorkbook.Worksheets("請求書ひな形")

などと書く必要があります。アクティブなうちにセットしちゃうと簡潔に書けることが多いです。

Nameプロパティでシート名を変更する

コピーしたシートは「請求書ひな形」というシート名ですが、各社ごとに作る請求書に”ひな形”はおかしいので、ここでリネームをしておきます。

シート名を変更するときはNameプロパティを使って

Worksheetオブジェクト.Name = シート名

とします。

実行結果

このプログラムを実行しますと

エクセルVBAで新たに作成されたワークブック

このように新規ワークブックができ、そこに「請求書ひな形」シートがコピーされた上で、シート名が「請求書」に変更されています。

まとめ

エクセルVBAで新規のワークブックを作成して請求書ひな形シートをコピーするプログラムを作成しました。

今回は短いプログラムでしたが

  • Workbooks.Addで新規ワークブックを作成
  • Worksheetオブジェクト.Copyでワークシートをコピー
  • Worksheetオブジェクト.Nameでシート名を変更
  • ThisWorkbookとActiveWorkbookの違い
  • 新規のブックやシートはアクティブになる

などなど、けっこう使えるTIPS盛りだくさんでお送りしました。

さて、次回はいらないシートを削除する方法についてお伝えしていきたいと思います。

【脱エクセルVBA初心者】確認メッセージを表示させずにワークシートを削除する方法
脱エクセルVBA初心者向け、請求書を自動で作る際の様々なテクニックをお伝えしています。今回は、エクセルVBAで特定のシートを削除する方法と、削除時の確認メッセージをオフにする方法についてお伝えします。

どうぞお楽しみに!

連載目次:【脱エクセルVBA初心者】請求書を自動で作る際のテクニック集

「請求書を自動で作る」というニーズはとても多いですから、その際に便利な機能やテクニックをシリーズにてお伝えしていきます。脱エクセルVBA初心者をターゲットにしています。
  1. 【脱エクセルVBA初心者】新規のワークブックを作成、シートのコピーと名前の変更
  2. 【脱エクセルVBA初心者】確認メッセージを表示させずにワークシートを削除する方法
  3. 【脱エクセルVBA初心者】PDFでの出力とファイル名の指定保存そして閉じる
  4. 【脱エクセルVBA初心者】データが含まれる範囲全体を一発で取得してSortで並び替え
  5. 【脱エクセルVBA初心者】コピペはRangeが効率的なのでその範囲を見つけるプログラム
  6. 【脱エクセルVBA初心者】Copyメソッドで範囲まるごとを一発でコピペする
  7. 【脱エクセルVBA初心者】Vlookupで出てしまうエラーをいい感じに回避する方法
  8. 【脱エクセルVBA初心者】請求書作成マクロの全体おさらいと総仕上げ

タイトルとURLをコピーしました