では、VBAの基礎における最後のステップ、印刷に関するコードを作成していきます。また、名前を付けて保存する方法と印刷プレビューの方法も一緒に説明していきます。
では、下のとおりにコードを作成してください。
Sub 印刷()
Dim Fname As Variant
Dim NwBook As Workbook
Set NwBook = Workbooks.Add
Fname = Application.GetSaveAsFilename _
(FileFilter:="Excel ファイル(*.xlsx),*.xlsx")
If Fname <> False Then
NwBook.SaveAs Fname
End If
With Worksheets("Sheet1")
.Range("A1") = 1000
.PrintOut
.Range("B1") = "ワークシート"
.PrintOut Preview:=True
End With
End Sub
このコードを実行すると、新規ブックの作成、名前付け保存、印刷、そして印刷プレビューが次々に処理されるのが分かります。では、このVBAコードの説明をしていきます。
まず、名前を付けて保存のダイアログボックスが返してくるファイル名を格納する変数をバリアント型で宣言します。
次に、Addメソッドで新規ブックを作成し、それをNwBookにして扱います。
名前を付けて保存のダイアログボックスを使うには、ApplicationオブジェクトのGetSaveAsFilenameメソッドを使います。このメソッドは、画面に名前を付けて保存のダイアログを表示させ、ユーザが入力したファイル名を選んだフォルダ名・ドライブ名と一緒にフルパスで返してきます。これを変数Fnameで格納しておきます。
Application.GetSaveAsFilename (InitialFileName、FileFilter、FilterIndex、Title、ButtonText)
Application :アプリケーションオブジェクトを指定
InitialFileName :デフォルトのファイル名を指定
FileFilter :ファイルの種類を指定
FilterIndex :フィルタの何番目がデフォルトになるかを指定
Title :ダイアログボックスのタイトルを指定
ButtonText :[保存]ボタンに表示する文字を指定
この記述例のようにGetSaveAsFilenameの引数で、fileFilter:="Excel ファイル (*.xls)、*.xls"と指定すると、名前を付けて保存のダイアログボックスには、ファイルの拡張子が「.xls」のファイルだけしか表示されません。
次のIFステートメントでは、変数Fnameの値がFalseでなければファイル名が入力されていると判断し、ファイル名を変数FnameとしてSaveAsメソッドで保存します。
次の構文では、ワークシート「sheet1」のセルA1に1000を代入し、プリントアウト(印刷)を処理します。セルに値を入れているのは、Excelはデータのないワークシートは印刷を行わないからです。
また、PrintOutメソッドの引数にPreviewを設定し、Trueを設定すると直接印刷はせず、印刷プレビューを表示します。通常は、印刷プレビューを表示させ、印刷はユーザに直接実行させたほうがいいでしょう。
object.PrintOut (From、To、Copies、Preview、ActivePrinter、PrintToFilter、Collate)
object :印刷するオブジェクトを指定
From/To :印刷開始と終了のページ数を指定
To :印刷終了ページ数を指定
Copies :印刷部数を指定
Preview :印刷前に印刷プレビューするかどうかを決める
ActivePrinter :印刷するプリンタを決める
PrintToFilter :ファイルに出力するかどうかを決める
Collate :部単位で印刷するかどうかを決める
セルの指定はRangeプロパティまたはCellsプロパティを使います。これらのプロパティを用いると、Rangeオブジェクトが操作でき、セルやセル範囲にデータや数式を入力することができます。また、WorkbookオブジェクトやWorksheetオブジェクトの指定を省略したときは、自動的に現在選択されているWorkbookオブジェクトやWorksheetオブジェクトを参照します。(セル番地のアルファベットは大・小文字のどちらでもかまいません)
記述例 | 意味 |
---|---|
Range("A1") | A1のセル |
Cells(1、1) | A1のセル |
Range("A1:B1") | A1からB1のセル範囲 |
Range(Range("A1")、Range("B1")) | A1からB1のセル範囲 |
Range(Cells(1、1)、Cells(1、2)) | A1からB1のセル範囲 |
Range("A1、D1") | A1とD1のセル |
Range("A:A") | A列全体 |
Rows("3") | 3行目全体 |
Rows(3) | 3行目全体 |
Rows("3:5") | 3行目から5行目までの全体 |
Union(Rows("3")、Rows("5")) | 3行目全体と5行目全体 |
Columns("A") | A列全体 |
Columns(1) | A列全体 |
Columns("A:C") | A列からC列までの全体 |
Union(Columns("A")、Columns("D")) | A列全体とD列全体 |