連載
» 2017年11月28日 05時00分 公開

働く価値を上げる“VBA/GAS術”(5):一石二鳥で時間に余裕が!――面倒くさい見積書や請求書などの書類を自動作成するマクロとは (3/3)

[高橋宣成,プランノーツ]
前のページへ 1|2|3       

領収書を作成するプロシージャ

 では次に、Subプロシージャ「領収書作成()」の内容を解説します。このプロシージャのおおまかな流れは以下の通りです。

  1. ひな型のブックを開く
  2. 以下の処理をSheet1の2行目から4行目まで繰り返し
    1. Sheet1のリストから氏名、品目、金額のデータを作成する
    2. 作成した氏名、品目、金額のデータをひな型に転記する
    3. ひな型に名前を付けて保存する
  3. ひな型のブックを閉じる

Workbookオブジェクト

 まず、以下の部分を見ていきます。

Dim wb As Workbook

 ここでは、Dimステートメントで「Workbook」型の変数を宣言しています。Workbookオブジェクトは、「ブックを取り扱う」オブジェクトで、メソッドやプロパティを使って、保存したり、ブック名を変更したり、閉じたりといった操作が行えます。

 その次の行に登場する「ThisWorkbook」は、現在マクロを記述しているWorkbookオブジェクトを表すオブジェクト名です。このオブジェクトは、宣言なしで使用できるので便利です。また、Workbookオブジェクトの「Path」プロパティは、以下のように記述することで、ブックの保存されているフォルダパスを取得するプロパティです。

Workbookオブジェクト.Path

ブックを開き変数にセットする

 次に、以下の部分を解説します。

Set wb = Workbooks.Open(ThisWorkbook.Path & "\領収書ひな型.xlsx")

 まず文字列や数値の場合、代入は不要でしたが、変数にオブジェクトを格納する場合は「Set」ステートメントが必要になります。ここは、比較的ミスしやすいポイントなので注意しましょう。

 ファイルを開いて変数に格納する場合は、「Workbooks」コレクションの「Open」メソッドを使います。書式は以下の通りです。

Set 変数 = Workbooks.Open(ファイル名)

 Workbooksコレクションは、Workbookオブジェクトの集合体です。コレクションもオブジェクトの1つなのですが、集合体であることを分かりやすく伝えるために、コレクションという表現が使われます。

 また、Openメソッドの引数で与えるファイル名は、既定フォルダでない限りはフルパスで与える必要があります。そのため今回は、「ThisWorkbook.Path」で指定しています。

Worksheetオブジェクトの取得と格納

 以下は、開いたブックのシートを取得し、「Worksheet」型で宣言をした変数にセットをしている部分です。

Dim ws As Worksheet
Set ws = wb.Worksheets(1)

 ここでは、Workbookオブジェクトの「Worksheets」プロパティを使っています。

Workbookオブジェクト.Worksheets(インデックス)

 丸括弧を付けない場合、指定したWorkbookオブジェクトに含まれる全てのシートをWorksheetsコレクションとして取得します。一方で、丸括弧内にインデックスを指定すると、該当するシートのみを、Worksheetオブジェクトとして取得できます。「インデックス」は、シートの並び順を表しており、一番左のシートが1で、以降1ずつカウントアップされていきます。

Withステートメントでオブジェクト名

 続いて、以下の部分を見ていきましょう。

With Sheet1
    Dim name As String '姓 名
    name = .Cells(i, 1).Value & " " & .Cells(i, 2).Value
    
    Dim description As String '品目
    description = "但 " & .Cells(i, 3).Value & " として上記領収致しました。"
    
    Dim amount As Long '金額
    amount = .Cells(i, 4).Value
End With

 ここでは、「With」ステートメント構文を使用しています。これは、ブロック内で指定したオブジェクトの表記を省略できる役割を持ちます。

With オブジェクト名
    '処理
End With

 今回の例では、オブジェクト「Sheet1」を指定しています。そのためブロック内の処理は「.Cells(i, 1).Value」のように、オブジェクト名の記述を省略して、ピリオドから記述できます。Withステートメントは、コードの記述量を減らすだけでなく、コードの分かりやすさを高める効果もあります。

文字列の連結

 2つの文字列を連結するには「&」記号を用います。

文字列1 & 文字列2

 ダブルクォーテーションで囲んだ文字列や変数、プロパティの値を指定できます。今回の例では、「姓」と「名」を連結する部分、「品目」を含めたただし書きを生成する部分などで使用しています。

Rangeプロパティでセルを取得

 セル(またはセル範囲)を表すRangeオブジェクトを取得するには、Cellsプロパティを使う方法以外に、Rangeプロパティを使う方法があります。

Worksheetオブジェクト.Rangeプロパティ(アドレス)

 Rangeプロパティは「A4」や「B9」などのセルアドレスを直接指定するので、Cellsプロパティより場所が分かりやすいというメリットがあります。Rangeオブジェクトを取得し、データを転記している箇所が以下の部分です。

With ws
    .Range("A4").Value = name & " 様"
    .Range("B9").Value = description
    .Range("C7").Value = amount
End With

ブックを別名で保存し閉じる

 転記が完了したら、以下の部分で、それぞれの参加者名を使用した別名でブックを保存します。

Dim wbName As String
wbName = ThisWorkbook.Path & "\領収書(" & name & ").xlsx"
wb.SaveAs wbName

 ブックを別名で保存するには、「SaveAs」メソッドを使います。

Workbookオブジェクト.SaveAs ファイル名

 ファイル名はフルパスで記すことで指定したフォルダに保存できます。

ブックを閉じる

 ブックを閉じるのは「Close」メソッドを使います。書式は以下の通りです。

Workbookオブジェクト.Close

 今回のマクロでは、全ての処理が完了したときに以下のようにしてひな型ファイルを閉じるようにしています。

wb.Close

プロシージャ全体を確認

 解説は以上です。再度プロシージャ「領収書作成()」の内容を確認してみましょう。

Sub 領収書作成()
Dim wb As Workbook
Set wb = Workbooks.Open(ThisWorkbook.Path & "\領収書ひな型.xlsx")
Dim ws As Worksheet
Set ws = wb.Worksheets(1)
Dim i As Long
For i = 2 To 4
    
    'データの作成
    With Sheet1
        Dim name As String '姓 名
        name = .Cells(i, 1).Value & " " & .Cells(i, 2).Value
        
        Dim description As String '品目
        description = "但 " & .Cells(i, 3).Value & " として上記領収致しました。"
        
        Dim amount As Long '金額
        amount = .Cells(i, 4).Value
    End With
    
    'データを転記
    With ws
        .Range("A4").Value = name & " 様"
        .Range("B9").Value = description
        .Range("C7").Value = amount
    End With
    
    'ブックを別名で保存
    Dim wbName As String
    wbName = ThisWorkbook.Path & "\領収書(" & name & ").xlsx"
    wb.SaveAs wbName
Next i
wb.Close
End Sub

次回はGoogle Apps Scriptで書類を作成します

 今回は、データの作成や転記を行い、自動で書類を作成するマクロを紹介しました。Workbookオブジェクトの操作、Rangeプロパティ、Withステートメントなど使用頻度の高いテクニックがちりばめられているので、ぜひマスターしておきましょう。また、今回は題材として領収書を使用しましたが、他の書類の場合でも基本的な内容は変わりませんので、挑戦してみてください。

 次回はGASで今回と同様の自動で書類を作成するツールを作成していきます。どうぞお楽しみに。

著者プロフィール

高橋宣成

プランノーツ 代表取締役

「ITを活用して日本の『働く』の価値を高める」をテーマに、ExcelやVBA、G Suite、Google Apps Script、クラウドなどによる企業または個人事業主向けのシステムおよびツールの開発やコンサルティング、セミナー講師などを務める。「IT×働き方」をテーマに運営するブログ「いつも隣にITのお仕事」は月間47万PV達成。

書籍紹介

ExcelVBAを実務で使い倒す技術

高橋宣成著 秀和システム 1944円(税別)

動くコードが書けたその先、つまり「ExcelVBAを実務で使う」という目的に特化した実践書。ExcelVBAを楽に効果的に使いこなし続けるための知恵と知識、そしてそのためのビジョンと踏み出す勇気を提供する1冊。


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。