ワークシートにコンボボックスを設置して、そのリストで選択されたシートを印刷します。
時給計算表作成の第8回目です。
今回は、ActiveXコントロールで設置してエクセルVBAコードで操作していきます。
エクセルVBAで時給計算表を作成しています。8回目の記事になります。
今回は、作成保存した時給計算表を、印刷する場合の仕組みをエクセルVBAコードで作っていきます。
こんにちは、じゅんぱ店長(@junpa33)です。
時給計算に関連する記事の一覧
無料DL!時給計算表エクセルソフト 個人別ブックで管理出来ます。
の記事で行うことが出来ます。
コンテンツ
ワークシート上のコンボボックスで印刷シートを指定
基本ペーパーレスにしても、そうとばかりはいかない場合が多いです。
ここでは、保存した時給計算表をプリントアウトする仕組みを作っていきます。
印刷の方法としては、印刷したいシートを開き「ファイル」→「印刷」でいいのですが、
折角、VBAコードを組み立てていますので、これをちょっとオシャレにコード化したいと思います。
一連の流れはこのようになります。
1.「シートリスト作成」ボタンをクリックします。
2.「プルダウンボタン(ActiveXコントロール・コンボボックス)」を押すとこのBookに存在するシートがリスト化されています。
3.シート名を選択し「シート印刷」をクリックします。
4.印刷プレビュー画面でシートを確認して良ければ「印刷」をクリックします。
5.ファイル内のシート構成を変更した場合は、「シートリストクリア」をクリックしリストを削除してリセットします。
画像説明の様に、ActiveXコントロール・コマンドボタンとVBAプロシージャーとの紐づけは、この記事では説明しません。(後の記事になります。)
今回紹介するのは、このVBAコードのプロシージャー作成の部分になります。
コンボボックスから印刷シートを指定するVBAコード
この記事のエクセルVBAコードは、「Module3」に記述していきます。
コンボボックスの設置から行っていきます。
コンボボックスの設置
コンボボックスの設置はコマンドボタンと同様です。
Excelの「開発タブ」から「挿入」→「ActiveXコントロール」→「コンボボックス」と指定して、エクセルシート上の必要か所に十字カーソルで大きさを決めて設置してください。
オブジェクト名はデフォルトの「ComboBox1」です。
シート名をコンボボックスのアイテムで加えるVBAコード
コンボボックスのプルダウンにシート名を表示するVBAコードを作成します。
変数ShN()は配列変数です。それぞれのシート名を入れますが、シート名の数がまだ不明です。
数量が確定した時点でReDimで再宣言を行います。
コンボボックスにシート名を表示させるには、「AddItem」メソッドを使います。
Sub シート名() Dim Sh As Worksheet Dim ShN() As String Dim n As Long Dim ComboBox1 As MSForms.ComboBox '全シート名を抽出するして配列に代入します n = Worksheets.Count '配列変数を再宣言します。 ReDim ShN(n) '0からスタートして、配列変数にシート名を代入していきます n = 0 For Each Sh In Worksheets ShN(n) = Sh.Name n = n + 1 Next '配列に代入したシート名をコンボボックスアイテムに移します For n = 0 To Worksheets.Count - 1 Worksheets("初期設定項目").ComboBox1.AddItem ShN(n) Next n End Sub
コンボボックスで選択したシートを印刷するVBAコード
次に、コンボボックスで選択されたシートを印刷します。
コンボボックスで選んだシート名を取り出すには、
「ListIndex」プロパティはリストの番号を取得します(整数値)。
「List」メソッドはリストの項目テキストを取得します。
シート名(文字列)を表示させるためには「.List(.ListIndex)」と記述します。
印刷設定を行います。
- プリントエリアの指定
- ヘッダー表示
- A4サイズ指定、印刷方向
- 上下左右余白
プリントプレビューで印刷シートの確認
印刷
Callステートメントの使い方について詳しくはこちらです。
Gotoステートメントの使い方について詳しくはこちらです。
Sub シート印刷() Dim PSh As String Call Module1.設定値代入 Worksheets("初期設定項目").Select 'リストで選択されたシート名を取り出します With Worksheets("初期設定項目").ComboBox1 '-------選択されなかった場合のエラー処理 On Error GoTo errstep1 '-------選択されたシート名を変数PShに代入します PSh = .List(.ListIndex) End With '印刷のための設定を行います With Worksheets(PSh).PageSetup .PrintArea = "A1:K34" .RightHeader = EmpName & "時給計算表" & PSh .PaperSize = xlPaperA4 .Orientation = xlLandscape .LeftMargin = Application.CentimetersToPoints(1) .RightMargin = Application.CentimetersToPoints(1) .TopMargin = Application.CentimetersToPoints(1) .BottomMargin = Application.CentimetersToPoints(0.5) .HeaderMargin = Application.CentimetersToPoints(0.5) .FooterMargin = Application.CentimetersToPoints(0.5) End With 'プリントプレビューを表示します Worksheets(PSh).PrintPreview Exit Sub 'エラー時の処理方法 errstep1: MsgBox "シートの選択がされていません" End Sub
コンボボックスのリストのクリア
シート構成が変わった時には、コンボボックスのリストを変更しなければなりません。
一旦、今のリストをクリアして、再度シートリストを作成するという方法になります。
コンボボックスのリストクリアは非常に簡単です。
Sub コンボリストクリア() 'コンボボックスのリストをクリアする With Worksheets("初期設定項目").ComboBox1 .Clear End With End Sub
シートに設置したコンボボックスからの印刷のまとめ
作成保存した時給計算表の印刷方法について説明してきました。
エクセルのデフォルトの印刷機能であれば、よくご存じのように印刷したいシートを表示して「ファイル」→「印刷」(その前に印刷設定もあります)をしないといけません。
会計月毎の保存シートも1年で12枚、多年に渡ればその何倍かになります。
その度毎に、シートを開きに行ったのでは大変です。
シート数が増えれば増えるほど、今回説明したこの機能が役に立ってくると思います。
またこの方法は、別にいろいろな場面でも使えるテクニックですので、ご自身で応用を考えられても面白いかと思います。
短期間でエクセルVBAの独学習得を目指したいなら
エクセルVBAを独学する独習方法は、学習者それぞれ十人十色、多種多様と思われます。
けれども、
出来るだけ効率よく学習するためには、いくつかの大切なポイントがあります。
独学でもVBA習得の中級クラスに達するのはそんなに難しいことではありません。
先人が行った勉強方法をあなたがそのまま利用すればよいということです。
独習のための大切な7つのポイントは、上記記事にて解説しています。
独習によるVBA習得のキーワードは、
出来るだけ多くの実例に触れること!
です。
正直、VBAの学習について自分の周りの仕事(業務)からだけ実例を得るのでは効率良い習熟は無理です。
ハッキリ言って、
本当に短い期間でVBA習得を成功させたいなら、今使っている参考書が良書かどうかを判断し、新ツールとしてオンライン学習も取り入れて行うことが、
手っ取り早く短期間習得できるというのは間違いないでしょう。
エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。
エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です
このサイトでよく使うVBAのコードのトピックを纏めています。
今回の記事はここまでです。 最後までご覧いただき有難うございました。









