エクセルのシートに入力を行なった後に入力内容をクリアしたいという場合はよくあるかと思います。
ここで入力した箇所を選んでDeleteキーで消したり、0で埋めるなんて方法でもいいのですが、消し忘れがあったり、複数のシートにまたがって消去するとなると若干手間がかかります。
そこで確実かつ簡単に入力内容を消すためにVBAマクロを使用します。
シートの用意
前回、商品項目を自動的に詰めてくれる見積書で使用したシートを改良します。
入力内容リセット用のコード
今回は新しくresetプロシージャと見積書のリストを消去するためのclearQuotationプロシージャを追加しています。
また見積書のリストに項目を埋めるためのプロシージャはfillOutQuotationとなっています。
Option Explicit
'商品リストの最初の行
Const firstRow As Integer = 2
'商品リストの最後の行
Const lastRow As Integer = 6
'見積書の最初の行
Const quoFirstRow As Long = 24
Sub fillOutQuotation()
Dim i As Long
Call clearQuotation
' 見積書の商品リストの最初の行をセットする
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
Sub reset()
Dim rowCount As Long
Dim i As Long
' 行数のカウント
rowCount = Worksheets("商品リスト").Range("A2").End(xlDown).Row
' 2行目から最終行のC列のセルを0にする
For i = 2 To rowCount Step 1
Worksheets("商品リスト").Cells(i, 3) = 0
Next
Call clearQuotation
End Sub
Sub clearQuotation()
' 見積書のリストの項目を消去
Worksheets("見積書").Range("A24:F33") = 0
End Sub
resetプロシージャで商品リストの個数を全て0にして、clearQuotationにて見積書のリストを消去しています。
ボタンへの割り当て
シートへのボタンの追加はメニューの 開発 -> 挿入 -> ボタン(フォームコントロール)から行えます。

ボタンを選択後、シート上で任意の箇所で左クリック(ドラッグで大きさ調整)でボタンが作れます。
割り当てるマクロは先ほど追加したThisWorkbook.resetを選んでOK。
ボタンを押すと商品リストの個数が全て0になり、見積書のリストの項目も消えています。
今回のエクセルファイル
商品リスト_見積書


