連載
» 2016年10月31日 05時00分 UPDATE

Excelマクロ/VBAで始める業務自動化プログラミング入門(16):印刷設定したExcelシートをPDF化して保存&個人情報管理システムの仕上げ (1/3)

プログラミング初心者を対象にExcelマクロ/VBAを使った業務自動化プログラムの作り方を一から解説します。最終回は、個人情報管理システムの仕上げを行い、IsNumeric関数の使い方やExportAsFixedFormatメソッドで印刷設定したシートをPDF化して保存する方法を紹介します【Windows 10、Excel 2016に対応】。

[薬師寺国安,PROJECT KySS]

 プログラミング初心者を対象にExcelマクロ/VBAを使った業務自動化プログラムの作り方を一から解説する本連載「Excelマクロ/VBAで始める業務自動化プログラミング入門」。今回で本連載は最終回だ。ここまでで、最低限度VBA/マクロへの理解と、「どのようなことができて、VBA/マクロを使うと何が便利なのかを分かっていただけたのではないだろうか。今回は連載第13回から作ってきたExcel VBAで作る個人情報管理システムの仕上げとして、印刷関係について解説する。

 Excelでデータを登録した場合、プリンターでデータを打ち出したり、またはPDFに書き出して利用する機会は当然ある。そのため前回では、「メニュー画面」にも「印刷」のメニューを追加しておいた。

 印刷では、「印刷設定」と「印刷またはPDF化」の2つのフォームを用意している。「印刷設定」では、印刷範囲を指定する入力欄を表示する。また、データが複数ページに渡る場合に、ページごとに、「見出し」を表示して印刷するために、どの行を「見出し」として使用するかを設定する入力欄を表示する。

 「印刷とPDF実行」画面では、出力を「プリンターに印刷」するか、「PDF」として書き出すかを選択できるようにしている。「印刷」を選択した場合は、「印刷部数」を指定して、「印刷実行」のボタンをクリックするとプリンターに出力される。

「印刷設定」フォームの各コントロールの配置とプロパティの設定

 これまでの連載と同じ手順でVBEを起動する。VBEのメニューから[挿入]→[ユーザーフォーム]と選択して、「UserForm3」を追加する。UserForm3の[プロパティ]から[Caption]に「印刷設定フォーム」と指定する。

 表示されるフォームに[ツールボックス]から表1のコントロールを配置する。「印刷範囲テキストボックス」と「見出し行テキストボックス」のプロパティから[IMEMode]に「fmIMEModeOff」を指定して、「英数文字」の入力を可能にしておく。

 1個目の「ボタン」のプロパティから[Caption]に「メニュー」と指定する。「ボタン」の表面の文字が「メニュー」に変わる。

 2個目の「ボタン」のプロパティから[Caption]に「印刷プレビュー」と指定する。「ボタン」の表面の文字が「印刷プレビュー」に変わる。

表1 配置するコントロール
コントロール オブジェクト名
ラベル(印刷の範囲設定) デフォルト
ラベル(見出し行の設定) デフォルト
テキストボックス 印刷範囲テキストボックス
テキストボックス 見出し行テキストボックス
ラベル(【例】の表示) デフォルト
ラベル(【例】の表示) デフォルト
ボタン メニューボタン
ボタン プレビューボタン

 表1のコントロールを配置すると、図1のようなレイアウトになる。

図1 各コントロールを配置した

 プロジェクト内のUserForm3を選択して、マウスの右クリックで表示されるメニューから、「コードの表示」を選択する。

「印刷設定」フォームのマクロ

 ここからは、「印刷設定」フォームのマクロを記述していく。

UserForm3がアクティブになったときの処理

 まず、UserForm3がアクティブになったときの処理だ(リスト1)。「個人情報データ」シートを選択して表示させている。

Private Sub UserForm_Activate()
  Worksheets("個人情報データ").Select
End Sub
リスト1 UserForm3がアクティブになったときの処理

「印刷プレビュー」ボタンをクリックしたときの処理

 次は、「印刷プレビュー」ボタンをクリックしたときの処理だ(リスト2)。

Private Sub プレビューボタン_Click()
  With Worksheets("個人情報データ").PageSetup _ 
    .Orientation = xlLandscape _ 
    .Zoom = 65 _ 
    .PrintArea = 印刷範囲テキストボックス.Text _ 
    .PrintTitleRows = 見出し行テキストボックス.Text _ 
    .PrintTitleColumns = "" _ 
    .RightFooter = "&P/&Nページ" _ 
    .LeftFooter = "&F:&A"
  End With
  UserForm3.Hide
  Worksheets("個人情報データ").PrintPreview
End Sub
リスト2 「印刷プレビュー」ボタンをクリックしたときの処理

 シートにページ設定を行うオブジェクトである「PageSetup」では、With〜End Withステートメントを使って、各プロパティを設定している。「PageSetup」については、連載第11回でも紹介しているので、そちらも参照してほしい。

 印刷の向き(Orientaion)は「xlLandscape」(横)に指定する(3行目)。縦を指定する場合は「xlPortrait」を使用するが、今回はデータが横に長いので、「xlLandscape」を指定している。縦を指定する場合の例は、連載第11回を参照してほしい。

 拡大縮小率(Zoom)には「65」を指定する(4行目)。

 印刷範囲を指定するPrintAreaには「印刷範囲テキストボックス」に入力された値を指定する(5行目)。

 「RightFooter = "&P/&Nページ"」では「ページ番号/総ページ数」という形式でページ番号を表示している(8行目)。「LeftFooter = "&F:&A"」では「ファイル名」と「シートの見出し名」を「:」で区切って表示している(9行目)。指定の仕方の詳細は連載第11回の「ヘッダーやフッターの設定に使う、さまざまなプロパティ」を参照してほしい。

 HideメソッドでUserForm3のフォームを隠す(11行目)。この場合、UserForm3のフォームが開いたままだと、印刷プレビューで表示された画面の操作が不可能になるため、あえて「印刷設定」のフォームは消している。再度メニューを表示させる場合は、「メニュー」シートを選択して表示する仕様だ。

 最後にPrintPreviewメソッドで印刷プレビューを表示する(12行目)。

 「印刷設定」を実行すると図2のようになる。

図2 「印刷設定」フォームで設定をして、印刷プレビューを表示した

 図2ではページが複数ページになっていないので分からないが、データが増えてページが複数ページにわたった場合、各ページの先頭に、図2の下図の赤い枠線で囲った見出しが、各ページに表示されることになる。

「メニュー」ボタンをクリックしたときの処理

 次は「メニュー」ボタンをクリックしたときの処理だ(リスト2)。「メニュー」シートを選択して、表示する。「印刷設定」のUserForm3は隠している。

Private Sub メニューボタン_Click()
  Worksheets("メニュー").Select
  UserForm3.Hide
End Sub
リスト2 「メニュー」ボタンをクリックしたときの処理
       1|2|3 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

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

メールマガジン登録

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