2020年6月13日
今回は Excelにおいて印刷イメージを整えることにチャレンジします。
JuseOffice06.zipにサンプルが入っています。
印刷用の環境がない場合を考えて、
印刷イメージは pdfとして書き出します。
用紙サイズの調整、ページ番号の付加、1ページにおさめるための縮小、
スタイルや罫線の設定、セル内の文字配置にもふれます。
JuseOfficeにはExcel用の印刷イメージ調整のサブルーチンを設けてありません。
なので、VBAの記述に即した一般的な書き方になります。
まずは単純なpdfファイルの書き出しについて述べます。
Excelでも ExportAsFixedFormatメソッドを使います。
Wordの場合と同じ名前のメソッドですが、
引数の順番や種類に違いがあります。
他にもいろいろな引数がありますが、普通は上記二つで大丈夫だとおもいます。
第2引数の「書き出すファイルの名前」を省略した場合、
test.xlsxをpdfとして書き出すなら test.pdf になります。
ただし、ドキュメントフォルダに書き出されます。
カレントフォルダに出力したいときは、パス名をつけて指定する必要があります。
なお、ExportAsFixedFormatメソッドは
ワークブックにもワークシートにも適用できます。
[ワークブック].ExportAsFixedFormat xlTypePDF, "C:\work\test.pdf"
[ワークシート].ExportAsFixedFormat xlTypePDF, "C:\work\test.pdf"
ワークブックに適用したときは、空でないワークシートを全部出力します。
以下にサンプルスクリプト pdf01.wsf の主要部分を掲げます。
都道府県別の人口・面積・人口密度(人口情報.xlsx)をpdfとして書き出します。
Include "const_xl.vbs"
sourceFile = "人口情報.xlsx"
pdfFile = FullPath("人口情報01.pdf")
[ワークブックを開く] sourceFile
[ワークブック].ExportAsFixedFormat xlTypePDF, pdfFile
[エクセルを終了]
用紙サイズおよび用紙の向きは、[ワークシート].PageSetup
の
PaperSize, Orientationふプロパティで指定します。
なお、PageSetup は、ワークブックオブジェクトには適用できないので要注意。
ワークシートごとに設定する必要があります。
Excelでは用紙サイズを xlPaperA4(数値9)などの定数で指定します。
Wordでは高さと幅をそれぞれ数値で指定しますが、Excelはそれとは違います。
たとえば下のとおり。
[ワークシート].PageSetup.PaperSize = xlPaperA4
A3, A4, A5, B4, B5, Letter などが指定可能です。
そのほか、各種の封筒に対応しています。
詳細は下記のサイトを参照してください。
用紙の向きを縦方向(縦長)にするか、横方向(横長)にするかの指定は
[ワークシート].PageSetup.Orientation = xlPortrait
のように指定します。
縦長は xlPortrait(数値1)、横長が xlLandscape(数値2)です。
以下に用紙サイズ、用紙の向きを指定するサンプル pdf02.wsf を掲げます。
Include "const_xl.vbs"
sourceFile = "人口情報.xlsx"
pdfFile = FullPath("人口情報02.pdf")
[ワークブックを開く] sourceFile
With [ワークシート].PageSetup
.PaperSize = xlPaperA5
.Orientation = xlLandscape
End With
[ワークシート].ExportAsFixedFormat xlTypePDF, pdfFile
[エクセルを終了]
Excelでは印刷イメージの拡大・縮小が簡単に行えます。
[ワークシート].PageSetup.Zoom = 50
とすれば50%(縮小)になります。
Zoomの数値は 10~400の範囲で指定できるようです。
また、ワークシート全体を1ページにおさめたいという場合は
倍率を指定するのでなく別の方法を使います。
たとえば下のとおり。
With [ワークシート].PageSetup
.Zoom = False ' 拡大・縮小率を指定しない
.FitToPagesTall = 1 ' 縦方向1ページで印刷
.FitToPagesWide = 1 ' 横方向1ページで印刷
End With
以下に都道府県別の人口等を1ページにおさめてpdfにする pdf03.wsf を掲げます。
Include "const_xl.vbs"
sourceFile = "人口情報.xlsx"
pdfFile = FullPath("人口情報03.pdf")
[ワークブックを開く] sourceFile
With [ワークシート].PageSetup
.PaperSize = xlPaperA4
.Orientation = xlPortrait
.Zoom = False ' 拡大・縮小率を指定しない
.FitToPagesTall = 1 ' 縦方向1ページで印刷
.FitToPagesWide = 1 ' 横方向1ページで印刷
End With
[ワークシート].ExportAsFixedFormat xlTypePDF, pdfFile
[エクセルを終了]
Excelでヘッダー・フッターを設定する方法については下のサイトが参考になります。
エクセルVBAで印刷時のヘッダー・フッターの設定をする方法と書式コード・VBAコード一覧
詳細は上記のサイトをみていただくとして、
フッターの中央に「1/4」のようなページ番号を付けるなら下のとおり。
[ワークシート].PageSetup.CenterFooter = "&P/&N"
&P
がページ番号、&N
が総ページ数に置き換えられます。
PageSetupに帰属する次のプロパティがヘッダー・フッターに関するものです。
LeftHeader, CenterHeader, RightHeader
LeftFooter, CenterFooter, RightFooter
それぞれ左・中央・右のヘッダーおよびフッターに関するプロパティです。
値として "&P/&N"
などの文字列をセットします。
文字列の中でアンド記号が特別の意味を持ちます。
&P, &N
の他に、
&D
現在の日付、&T
現在時刻、
&F
ファイル名、&A
ワークシート名などがあります。
斜体、下線、フォントなどの指定も可能です。
その辺の詳しい説明は上記サイトに解説があります。
以下にフッターの中央にページ番号を付加する pdf04.wsf を掲げます。
Include "const_xl.vbs"
sourceFile = "人口情報.xlsx"
pdfFile = FullPath("人口情報04.pdf")
[ワークブックを開く] sourceFile
With [ワークシート].PageSetup
.PaperSize = xlPaperA4
.Orientation = xlPortrait
.Zoom = False ' 拡大・縮小率を指定しない
.FitToPagesTall = 2 ' 縦方向2ページで印刷
.FitToPagesWide = 1 ' 横方向1ページで印刷
For Each prop1 In Split(".Left .Center .Right")
For Each prop2 In Split("Header Footer")
Eval(prop1 & prop2 & " = """"") ' .LeftHeader = "" など
Next
Next
.CenterFooter = "&P/&N"
End With
[ワークシート].ExportAsFixedFormat xlTypePDF, pdfFile
[エクセルを終了]
ヘッダーとフッターを念のため全消去して
その上でフッターの中央にページ番号を付加しています。
ヘッダーとフッターのプロパティが六つもあるので
各々のプロパティを6行でずらずら書くのは面倒です。
そこで、ForループとEvalを使って書いてみました。
でも、結果的にはあまり行数の節約になってないですね(あせ)。
なお、Eval は、引数としてわたされた文字列をスクリプトとして実行します。
ExcelにもWordと同じようにスタイルというのがあります。
ここでは、そのスタイルの設定方法、
セル内での文字の配置(左詰・中央そろえ・右詰)、
簡単な罫線の引き方を取り上げます。
Excelの文字は、通常、ゴシック体・11ポイントだとおもいますが、
セルのスタイルを「見出し 1」にすると、ゴシック体・15ポイント・太字になります。
「説明文」にすると、ゴシック体・11ポイントではありますが斜体になります。
サンプルのpdf05.wsf では、
1行目:【都道府県別人口・面積・人口密度】を「見出し 1」
2行目:【(2019年10月1日現在)】を「説明文」のスタイルにします。
該当箇所だけ示すと次のとおり。
With [ワークシート]
.Range("A1").Style = "見出し 1"
.Range("A2").Style = "説明文"
End With
zipファイルに styles.wsf を入れてあります。
実行すると、組み込まれているスタイルについて
スタイル名、フォント名、フォントのサイズ、太字、斜体、色、
背景色、背景の濃淡の8項目を出力します。
40以上のスタイルが styles.xlsx に書き出されます。
各行が該当のスタイルに設定されるので、見える人には一目瞭然だとおもいます。
色は ColorIndex(数値1~56)を使っています。
スタイル名として「良い」 「どちらでもない」 「悪い」がありますが、
アンケートの回答としてこの三択があるときに、
それぞれ該当のスタイルを適用すれば
見た目にわかりやすくなる、ということなんでしょうね。
「人口情報.xlsx」には人口、面積、人口密度という数値のデータがあります。
それら数値データを右詰にします。
左右バランスでの文字配置は HorizontalAlignment で行います。
セルA1の文字配置を右詰にするなら次のとおり。
.Range("A1").HorizontalAlignment = xlRight
設定できる値は下のとおり。
定数名 | 数値 | 配置 |
---|---|---|
xlLeft | -4131 | 左詰め |
xlCenter | -4108 | 中央揃え |
xlRight | -4152 | 右詰め |
xlJustify | -4130 | 両端揃え |
xlDistributed | -4117 | 均等割り付け |
xlGeneral | 1 | 標準(デフォルト) |
xlFill | 5 | 繰り返し |
xlCenterAcrossSelection | 7 | 選択範囲内で中央 |
一方、上下バランスでの配置は VerticalAlignment で行います。
設定できる値は下のとおり。
定数名 | 数値 | 配置 |
---|---|---|
xlTop | -4160 | 上詰め |
xlCenter | -4108 | 中央揃え(デフォルト) |
xlBottom | -4107 | 下詰め |
xlJustify | -4130 | 両端揃え |
xlDistributed | -4117 | 均等割り付け |
xlFill | 5 | 繰り返し |
ところで、右詰にしたいのは数値型です。文字型は変更しません。
あるセルが数値型かどうかは VarType関数で確認できます。
typeVal = VarType(.Range("A1").Value)
上のようにすれば A1セルのデータ型が変数 typeVal に代入されます。
typeValが vbDouble(数値5)だと数値型、vbString(数値8)であれば文字型です。
細かく言うと、typeVal には次のような数値が入るようですが、
Excelでは短い整数値でも vbDouble(数値5)になるようです。
定数名 | 数値 | 配置 |
---|---|---|
vbEmpty | 0 | Empty値(未初期化) |
vbNull | 1 | Null値(無効な値) |
vbInteger | 2 | 整数型(Integer) |
vbLong | 3 | 長整数型(Long) |
vbSingle | 4 | 単精度浮動小数点数型(Single) |
vbDouble | 5 | 倍精度浮動小数点数型(Double) |
vbCurrency | 6 | 通貨型(Currency) |
vbDate | 7 | 日付型(Date) |
vbString | 8 | 文字列型(String) |
vbObject | 9 | オブジェクト |
vbError | 10 | エラー値 |
vbBoolean | 11 | ブール型(Boolean) |
vbVariant | 12 | バリアント型(Variant) |
vbDataObject | 13 | 非OLE |
vbDecimal | 14 | 10進数型 |
vbByte | 17 | バイト型(Byte) |
vbUserDefinedType | 36 | ユーザー定義型を含むバリアント型 |
vbArray | 8192 | 配列 |
なお、TypeName関数でもデータ型を確認できます。
オブジェクト型の場合(たとえばワークブック、ワークシートなど)
TypeName関数は "Workbook", "Worksheet"
などを返してくれます。
該当箇所(たとえば A1:C3)に実線の格子罫線を引き、
外枠罫線を太い実線にするには次のようにします。
Set rng = [ワークシート].Range("A1:C3")
rng.Borders.LineStyle = xlContinuous ' 該当セル全部に実線罫線
rng.BorderAround xlContinuous, xlThick ' 外枠を太い実線罫線に
罫線にかかわる LineStyleプロパティは線の種類を指定するためのものです。
xlContinuous(数値1, 実線)のほか、xlDot(数値-4118, 点線)などもあります。
xlLineStyleNone(数値-4142, 線なし)を指定すると罫線が消えます。
ケイ線の太さを指定するための Weightプロパティもあります。
xlMedium(数値-4138, 普通)、xlThick(数値4, 太線)などがあります。
外枠罫線を引くための BorderAroundメソッドは
第1引数が LineStyle(種類)、第1引数は Weight(太さ)です。
スタイル、文字配置、罫線を調整するスクリプト pdf05.wsf を掲げます。
人口情報05.pdf のほかに、念のため pdf05.xlsx も出力します。
Include "const_xl.vbs"
sourceFile = "人口情報.xlsx"
pdfFile = FullPath("人口情報05.pdf")
excelFile = "pdf05.xlsx"
[ワークブックを開く] sourceFile
With [ワークシート].PageSetup
.PaperSize = xlPaperA4
.Orientation = xlPortrait
.Zoom = 75
End With
With [ワークシート]
.Range("A1").Style = "見出し 1"
.Range("A2").Style = "説明文"
rowFirst = .UsedRange.Find("北海道").Row
rowLast = [末尾のセル].Row
For col = 1 To 7 ' 1~7列をチェック
typeVal = VarType( .Cells(rowFirst, col).Value ) ' セルのデータ型
If typeVal = vbDouble Then ' 数値データである場合
.Range(.Cells(rowFirst, col), .Cells(rowLast, col)) _
.HorizontalAlignment = xlRight
End If
Next
Set rng = .Range(.UsedRange.Find("都道府県"), [末尾のセル])
rng.Borders.LineStyle = xlContinuous ' 該当セル全部に実線罫線
rng.BorderAround xlContinuous, xlThick ' 外枠を太い実線罫線に
.ExportAsFixedFormat xlTypePDF, pdfFile
End With
[ワークブックを別名で保存] excelFile
[エクセルを終了]
~ 以上 ~
Copyright (C) T. Yoshiizumi, 2020 All rights reserved.