まとめ
Excel上の表にて、選択中のセルがある行の内容をほぼ一発で単票として出力し、印刷したい。なお、単票のフォーマットは別のExcelシートに作成済みである。VBAでそれを行えるようにしてみた。コードのポイントは、ActiveCell.Row プロパティにて現在選択している行の行数を取得することである。
Excel上の表にて、選択中のセルがある行の内容をほぼ一発で単票として出力し、印刷したい。なお、単票のフォーマットは別のExcelシートに作成済みである。VBAでそれを行えるようにしてみた。コードのポイントは、ActiveCell.Row プロパティにて現在選択している行の行数を取得することである。
やりたいこと
複数の修理対象の物品がある。修理の状況は Excel 上の表「修理リスト」で管理している。
備忘のため、これら各々の物品に修理予定日などを記載した紙を貼り付けておきたい。
このために、Excelの「修理リスト」から物品を選択してマクロを実行するだけで、それに対応した内容の単票「修理票」をほぼ一発で出し、簡単に印刷できるようにしたい。
なお、単票「修理票」のフォーマットは、別のExcelシート「修理票」上に作成済みである。
環境
Microsoft Excel for Microsoft 365 MSO (バージョン 2312 ビルド 16.0.17126.20132) 64 ビット
やったこと
VBEを開き、修理リストの表があるシート(「修理リスト」)のオブジェクトに、以下のコードを記述した。
ポイントは、ActiveCell.Row プロパティにて現在選択している行の行数を取得することである。
Option Explicit Sub sample() '各種変数を宣言 Dim ar As Long, ReceiptNumber As String, DeviceName As String, ScheduledRepairDate As String '現在のセルを変数に入れる ar = ActiveCell.Row '受付番号を変数に入れる ReceiptNumber = Cells(ar, 1).Text '端末名を変数に入れる DeviceName = Cells(ar, 2) '修理予定日を変数に入れる ScheduledRepairDate = Cells(ar, 3).Text '集めた変数を、「修理票」の指定の場所に書き込む With Sheets("修理票") .Cells(1, 2) = ReceiptNumber .Cells(2, 2) = DeviceName .Cells(3, 2) = ScheduledRepairDate End With '「修理票」の印刷プレビュー Sheets("修理票").PrintPreview End Sub
結果
「修理リスト」にて修理したい物品の行のうちどれかのセルを選択している状態で、上記のマクロを実行してみた。
すると、別シートにある修理票のフォーマットに、その物品の情報が書き込まれ、直後に印刷プレビューが開いた。
所感など
単票の印刷なら Access が得意だけど、諸事情により Excel で出さなくてはいけない場合には、こういうやり方ができる。ということが、やってみて分かった。