【初心者向けエクセルVBA】セル範囲のクリア~ClearContentsメソッドとClearメソッド

eraser

photo credit: suzumi3 omni_01 via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

初心者向けエクセルVBAシリーズとして、請求データから請求書を作成するマクロの作り方についてお伝えしています。

前回の記事はこちら。

【初心者向けエクセルVBA】For~Next文でセル範囲を一行ずつ移動させる
初心者向けエクセルVBAのシリーズとして、請求データから請求書を作る方法をお伝えしています。今回はエクセルVBAでFor~Next文でセル範囲を一行ずつ移動させながらコピペをする方法をお伝えします。

For~Next文でセル範囲を移動させながらの処理の書き方をお伝えしました。

さて、実はこのマクロ。実行方法によっては、良くない結果になってしまうことがありまして、それを解消していきます。

エクセルVBAでセル範囲の値をクリアするClearContentsメソッドとClearメソッドの使い方です。

なお、本記事は以下のYouTube動画と連動していますので、合わせてご覧くださいませ。

では、行ってみましょう!

スポンサーリンク

前回のおさらいと課題

前回作成したプロシージャはこちらです。

Sub 請求書作成()

wsTemplate.Rows("21:50").Hidden = False '隠れているかもしれない行を再表示

Dim rowsData As Long '行数カウント用の変数
rowsData = wsData.Cells(Rows.Count, 1).End(xlUp).Row '最後の行数を取得

Dim i As Long, k As Long
k = 21
For i = 2 To rowsData
    Dim deliDate As Date
    deliDate = wsData.Cells(i, 1).Value
    If Year(deliDate) = 2018 And Month(deliDate) = 1 Then
        wsData.Range(wsData.Cells(i, 2), wsData.Cells(i, 4)).Copy wsTemplate.Cells(k, 1)
        k = k + 1
    End If
Next i

wsTemplate.Rows(k & ":50").Hidden = True  'データがない行を隠す
wsTemplate.Range("A18").Value = "ご請求金額:" & Format(wsTemplate.Range("D54").Value, "#,##0") & " 円"

End Sub

だいぶ立派になってきましたね…!

でも、実はこのマクロ、使い方によっては問題が出てしまいます。

以前の実行によるデータが残ってしまう問題

例えば、実行したときに、以下のような現象が起きてしまうときがあります。

エクセルVBAによる請求書作成で小計が異なる場合がある

転記した請求データの価格の実際の合計と、ひな形の計算式として計算されている小計の値が異なってしまう時があるのです。

実は、以前の実行した時のデータが、Hiddenプロパティで隠されているだけで残ってしまっているのです。

この問題を解消する必要があります。

ClearContentsメソッドでセル範囲の値をクリアする

この問題を解決するには、転記の処理を行う前に、以前のデータが残っている可能性があるセル範囲の値のクリアをする処理を入れるという手を使います。

セル範囲の値のクリアするには、ClearContentsメソッドを使うことができます。

書式は以下の通りです。

Rangeオブジェクト.ClearContents

今回の場合は、転記処理の前に以下のようなステートメントを入れておけばOKです。

wsTemplate.Range("A21:C50").ClearContents

ClearメソッドとClearContentsメソッドの違い

同様に、セル範囲をクリアするメソッドとして、Clearメソッドというものがあります。

書式は以下の通りです。

Rangeオブジェクト.Clear

こちらも、セル範囲のクリアをするメソッドなのですが、先程のClearContentsメソッドと何が違うのでしょうか?

試しに、以下のステートメントを冒頭に挿入して実行してみましょうか。

wsTemplate.Range("A21:C50").Clear

すると、以下のようになります。

エクセルVBAのClearメソッドは書式もクリアされる

わかりますか?

Clearメソッドの対象となった範囲のフォントが周りと別のものになりましたよね?

そうなんです、Clearメソッドはセルの値だけでなく書式も全てクリアします。

一方で、ClearContentsメソッドはセルの値のみをクリアします。

だから、今回は書式はそのままでしておきたいのでClearContentsメソッドを使うほうが良いですよね。

この違い、ぜひ覚えておいてくださいね。

まとめ

以上、エクセルVBAでセル範囲のクリアをする方法についてお伝えしました。

ソースコードのまとめはこちらです。

Sub 請求書作成()

wsTemplate.Rows("21:50").Hidden = False '隠れているかもしれない行を再表示
wsTemplate.Range("A21:C50").ClearContents

Dim rowsData As Long '行数カウント用の変数
rowsData = wsData.Cells(Rows.Count, 1).End(xlUp).Row '最後の行数を取得

Dim i As Long, k As Long
k = 21
For i = 2 To rowsData
    Dim deliDate As Date
    deliDate = wsData.Cells(i, 1).Value
    If Year(deliDate) = 2018 And Month(deliDate) = 1 Then
        wsData.Range(wsData.Cells(i, 2), wsData.Cells(i, 4)).Copy wsTemplate.Cells(k, 1)
        k = k + 1
    End If
Next i

wsTemplate.Rows(k & ":50").Hidden = True  'データがない行を隠す
wsTemplate.Range("A18").Value = "ご請求金額:" & Format(wsTemplate.Range("D54").Value, "#,##0") & " 円"
End Sub

ClearContentsメソッドとClearメソッドでは、クリアする対象が異なるという点もぜひ押さえて置きたいですね。

次回は、マクロ実行後の親切処理として、指定のシートやセルをアクティブにする方法についてお伝えします。

【初心者向けエクセルVBA】ワークシート・セルを選択する方法の色々について
初心者向けエクセルVBAシリーズ、請求データから請求書を作成する方法をお伝えしています。今回は、エクセルVBAでセル・シートをアクティブにするためのSelectメソッドとActivateメソッドです。

どうぞお楽しみに!

連載目次:データ一覧から請求書を自動で作る

お仕事において特定のデータ一覧から必要な情報を抽出するということは頻繁にありうると思います。ここではデータ一覧から請求書を作るということを目標に、実務で使えるスキルをまっすぐに身に着けることを目的としています。
  1. 【初心者向けエクセルVBA】データ一覧から請求書を自動で作る
  2. 【初心者向けエクセルVBA】ワークシートをオブジェクト名で取り扱う方法
  3. 【初心者向けエクセルVBA】For~Next文で簡潔にプログラムを書く
  4. 【初心者向けエクセルVBA】行の数をカウントする&不要な行を隠す
  5. 【初心者向けエクセルVBA】文字列の連結&Format関数での書式変更
  6. 【初心者向けエクセルVBA】セル範囲を一気にまとめてコピーする方法
  7. 【初心者向けエクセルVBA】ワークシートのデータのある範囲だけをピッタリ取得する方法
  8. 【初心者向けエクセルVBA】セル範囲の平行移動をする方法・リサイズをする方法
  9. 【初心者向けエクセルVBA】日付データから年・月・日を取り出す
  10. 【初心者向けエクセルVBA】If~Thenを使った条件分岐の超入門
  11. 【初心者向けエクセルVBA】For~Next文でセル範囲を一行ずつ移動させる
  12. 【初心者向けエクセルVBA】セル範囲のクリア~ClearContentsメソッドとClearメソッド
  13. 【初心者向けエクセルVBA】ワークシート・セルを選択する方法の色々について
  14. 【初心者向けエクセルVBA】入力ダイアログを表示するInputBoxメソッドの使い方
  15. 【初心者向けエクセルVBA】日付データから月末日と翌月末日を自動算出する
  16. 【初心者向けエクセルVBA】ワークシートをコピーする方法とそのシート名を変更する方法
  17. 【初心者向けエクセルVBA】オブジェクトを変数にセットして取り扱う方法
  18. 【初心者向けエクセルVBA】Openメソッドで新たなブックを開く方法
  19. 【初心者向けエクセルVBA】現在マクロを書いているブックのフォルダパスを取得する
  20. 【初心者向けエクセルVBA】開いたブックとそのワークシートをオブジェクト変数にセットする
  21. 【初心者向けエクセルVBA】ワークブックを別名で保存して閉じる方法
  22. 【初心者向けエクセルVBA】取引先別に請求書を作成するマクロを作る
タイトルとURLをコピーしました