エクセルで見積書を作成する場合に手作業で商品名や個数を入力するのは手間がかかります。
商品リストから自動的に見積書に項目がコピーされれば楽ですが、提供する商品、サービスのみ見積書に自動的に列挙されるようにするためにはVBAでの制御が必要です。
今回は商品リストで個数のセルで数が0より大きい数の時のみ見積書にその商品が記載されるようなマクロになります。
元となる見積書
元となる見積書はExcel 2016のテンプレートの「見積書 1 Excel」をベースとしたものです。
商品リストのシートと見積書のシートをまず用意します。
商品リストの方には商品名、単価、お客さんの注文に合わせて入力する個数、小計があります。
見積書の方には商品リストで個数が1以上の商品のみリストに列挙されるようにしたいと思います。
今回のコード
Option Explicit
'商品リストの最初の行
Const firstRow As Integer = 2
'商品リストの最後の行
Const lastRow As Integer = 6
'見積書の最初の行
Const quoFirstRow As Long = 24
Sub main()
Dim i As Long
' 見積書の商品リストの最初の行をセットする
Dim currentQuoRow As Long
currentQuoRow = quoFirstRow
For i = firstRow To lastRow Step 1
' 商品リストの個数が0より大きい場合
If Worksheets("商品リスト").Cells(i, 3).Value > 0 Then
' 商品リストのセルの値を見積書にコピー
Worksheets("見積書").Cells(currentQuoRow, 1) = Worksheets("商品リスト").Cells(i, 1)
Worksheets("見積書").Cells(currentQuoRow, 5) = Worksheets("商品リスト").Cells(i, 2)
Worksheets("見積書").Cells(currentQuoRow, 6) = Worksheets("商品リスト").Cells(i, 3)
' 次の商品に移動
currentQuoRow = currentQuoRow + 1
End If
Next i
End Sub
実行結果
これを実行するとちゃんと個数のセルに0以外の数値が入っている商品のみが見積書に記載されています。
セルの値をコピーするときはCopyを使った方が簡単ですが、今回は見積書のコピー先に結合されたセルがあるため普通に値のコピーをしました。


