インボイス見積納品請求伝票日付版のエクセルソフト作成です。
適格請求書に対応した形で、印刷設定のVBAの作り方の説明を行います。
見積納品請求の各帳票を発行出来ます。
こんにちは、じゅんぱ店長(@junpa33)です。
エクセルVBAソフトのインボイス見積納品請求伝票日付版を作成しています。
今回は、先回に完成した帳票を印刷できるように整えていきます。
印刷は、プリントプレビューの状態で表示し、そのプレビューの印刷ボタンで印刷できるようにします。
印刷操作のVBA設計では、各利用者側のプリンター使用環境への依存度が大きく影響します。
なので、
Worksheets(・・・).PrintOut
は使わずに
Worksheets(・・・).PrintPreview
を利用しています。PrintPreviewメソッドを持って印刷実行としています。
- コード設計のメリットとして、プリンター設定をPCに任せることで、VBA側からの使用するプリンターの指定を回避できる。
- トレイ指定や両面指定など個々の利用環境を考慮しなくてよい。
- 印刷余白ヘッダーフッターなどの追加修正をプレビューで行うことが出来る。
など、この印刷操作を行うVBAコードを埋め込まないことで、印刷時の予期せぬエラーを回避することが出来るからです。
インボイス見積納品請求3点伝票作成の記事編成
- インボイス見積納品請求3点伝票作成ソフトの使い方とダウンロード
- インボイス見積納品請求伝票日付版作成ソフトの使い方とダウンロード
コンテンツ
印刷設定の完成形(プリントプレビュー)
今回はここまで作成します。
印刷を設定するVBAコード
ユーザーフォームの「帳票印刷」ボタンをクリックすると、実行されるプロシージャーを設計します。
印刷を設定するVBA 全コード
ここではVBAコードをModule3に記述しています。
Option Explicit
Sub 印刷設定()
Dim SaRow, KeRow, NRow, Pc As Long
Dim a, s, b As Long
Dim Fsa, Fsb As Variant 'インボイス3点操作パネルデータを使用
Worksheets("作業シート").Select
SaRow = Cells(Rows.Count, 5).End(xlUp).Row
'印刷の範囲を調べる
If SaRow < 23 Then
KeRow = 40
Else
KeRow = 40 + Application.WorksheetFunction. _
RoundUp((SaRow - 23) / 34, 0) * 34
End If
'ページ数のカウント
Pc = Application.WorksheetFunction. _
RoundUp((SaRow - 23) / 34, 0)
'印刷範囲を設定
For a = 2 To 4
Worksheets(a).Select
With Worksheets(a)
NRow = .Cells(Rows.Count, 1).End(xlUp).Row
.PageSetup.PrintArea = False
.PageSetup.PrintTitleRows = "$15:$15"
If KeRow = 40 Then
.PageSetup.PrintArea = "A1:I40"
Else
.PageSetup.PrintArea = "A1:I" & KeRow
End If
'ページ番号
.PageSetup.CenterFooter = "&P"
'固定のフォントサイズ(品名以外)
.Range(Cells(16, 3), Cells(KeRow, 8)) _
.Font.Size = 11
.Range(Cells(16, 1), Cells(KeRow, 1)) _
.Font.Size = 10
'品名のフォントサイズ
.Range(Cells(14, 3), Cells(KeRow - 3, 3)).WrapText = True
Fsa = インボイス3点操作パネル.品名F.Value
If Fsa = "" Then
Fsa = 10
Else
Fsa = Val(Fsa)
End If
.Range(Cells(14, 3), Cells(NRow, 3)) _
.Font.Size = Fsa
'品名の個別フォントサイズ
If インボイス3点操作パネル.CheckBox4 = True Then
Call Module3.番号別フォントサイズ
End If
'合計のフォントサイズ
.Cells(NRow + 1, 2).Font.Size = 11
'顧客名のフォント
Fsb = インボイス3点操作パネル.顧客F.Value
If Fsb = "" Then
Fsb = 13
Else
Fsb = Val(Fsb)
End If
.Range("B6").Font.Size = Fsb
'フォント種選択(ユーザーフォームから選択)
If インボイス3点操作パネル.ComboBox1.Value = "" Then
.Cells.Font.Name = "MS Pゴシック"
Else
.Cells.Font.Name = インボイス3点操作パネル.ComboBox1.Value
End If
End With
Next a
'プレビュー画面を表示
For b = 2 To 4
Worksheets(b).PrintPreview
Next b
'自動保存設定
If インボイス3点操作パネル.CheckBox3 = True Then
Module4.伝票保存
End If
End Sub
ユーザーフォームのフォントサイズ変更で品名個別指定がされている時に呼び出されるプロシージャーです。
Sub 番号別フォントサイズ()
Dim HN() As String
Dim HNRow As Long
Dim HNList As String
Dim Fsc As Long
Dim a, i, Nomber As Long
HNList = インボイス3点操作パネル.個別品名番号.Value
Fsc = インボイス3点操作パネル.個別フォントサイズ.Value
Fsc = Val(Fsc)
For a = 2 To 4
With Worksheets(a)
.Select
'テキストボックスの文字列から数値を配列取り出し
HN = Split(HNList, ",")
For i = LBound(HN) To UBound(HN)
Nomber = Val(HN(i))
On Error Resume Next
'取り出した数値から行番号を調べる
HNRow = WorksheetFunction.Match(Nomber, _
.Range("A:A"), 0)
.Cells(HNRow, 3).Font.Size = Fsc
On Error GoTo 0
Next i
End With
Next a
End Sub
個々のVBAコードの動作説明
印刷設定 プロシージャー
SaRowは作業シートのデータ入力行数
KeRowは帳票ページ(「見積書」「納品書」「請求書」)の罫線を引く行数
「作業シート」の帳票作成データのボリューム(データ行数)を調べます。
帳票1ページ目は商品データ記入可能行数が22行です。
帳票2ページ以降は商品データ記入可能行数が34行となります。
別途合計欄3行を加味します。
Pcはページ数
「作業シート」の商品データ行数を2ページ以降の記入可能行数で割り算をして算出します。
(とりあえず、この時点で変数Pcの利用はありませんが・・・)
PageSetupでプリントタイトルを15行目に設定します。
印刷範囲を設定します。
PageSetupでフッター中央にページ番号を振ります。
商品データ行の商品以外の基準のフォントサイズを設定します。
セル内のテキスト表示を「折り返して表示」に設定します。
フォントサイズは、ユーザーフォームで指定したサイズで表示します。無指定の場合のサイズは「10」とします。
個別にフォントサイズを設定するにチェックした場合は、入力ボックスの品名番号についてフォントサイズを変更することが出来ます。
チェックマークがされた時は、部品化プロシージャー「番号別フォントサイズ」が実行されます。
品名が長くセル内に表示しきれない場合などに利用します。
NRowは帳票ページの商品番号の最終入力セルの行数です。
フォントサイズは「11」に設定します。
フォントサイズは、ユーザーフォームで指定したサイズで表示します。無指定の場合のサイズは「13」とします。
ユーザーフォームのコンボボックス(プルダウン)から選択します。
無指定の場合は“MS Pゴシック”となります。
「請求書」「納品書」「見積書」の順番でプレビュー画面を表示します。
最終印刷OK化を確認して印刷します。
プリンターを指定して紙印刷にするか、PDF印刷にするかをここで選択できます。
ユーザーフォームの「印刷時自動保存」チェックで、この印刷動作の最後で、「伝票保存」プロシージャーを呼び出し、続いて帳票保存プログラムを実行します。
番号別フォントサイズ プロシージャー
品名番号毎にフォントサイズを変更するプログラムです。
帳票シート毎にフォントサイズ変更処理を行っていきます。
品名番号入力ボックス(テキストボックス)のデータ(カンマ区切りでつながった文字列)を分解し、品名番号を配列として取り出します。(Split関数)
Array・LBound・RBoundの配列関数と各ステートメントを最速理解取り出した品名番号は、Match関数を使用して帳票シートのどの行数にあるのかを調べる。
見つかったその行の品名のフォントを変更する。
Match関数は、検索データが見つからないとエラーとなるので、必ずエラー回避コードも付けておきましょう。
印刷設定を行うVBA まとめ
印刷設定を行うVBAの説明を行いました。
これで商品データの加工から印刷まで一連の作業を行えるようになりました。
次回は、作成した帳票を保存するためのVBAを説明します。
エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。
エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です今回の記事はここまでです。 最後までご覧いただき有難うございました。
<記事内容についての告知>
VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。
アンケートでポイ活しよう!!
アンケートに答えれば答えるほど ”使える” ポイントがたまります。