もくじ
Excel VBAを使って「シートのデータをクリアしたい」「初期化したい」と思ったことはありませんか?
この記事では、業務でよく使われるVBAのテクニックとして、シートのデータを簡単にクリア・初期化する方法をわかりやすく解説します。
Excel VBAでシートのデータをクリアする方法
Excel VBAを使えば、簡単にシート内のセルの値や書式などをクリアすることができます。
Cells.Clearは、セルの値、数式、書式、コメントなどをすべて削除します。
ただし、セルの位置やサイズ(列幅や行の高さ)は保持されたままなので、レイアウトを維持したまま中身だけを初期化したい場合に便利です。
VBAではCells.Clear以外にも、目的に応じて使い分けられる「Clear系メソッド」が用意されています。
以下に代表的なメソッドをまとめました。
| メソッド | 説明 |
|---|---|
| ClearComments | コメントを削除 |
| ClearContents | セルの値や数式だけを削除し、書式は残す |
| ClearFormats | 値はそのままで、書式だけ削除したい場合に便利 |
| ClearOutline | アウトラインを削除 |
【実装コード】シートのデータをクリアする
以下のVBAコードは、Sheet1のデータをクリアしています。
Copyをクリックするとコピーできます。
Sub sample() 'シートのデータを削除 Sheets("Sheet1").Cells.ClearEnd Sub【実装コード】シートのデータを範囲指定してクリアする
範囲を指定してデータをクリアする方法として、業務でよく使う見出し以外をクリアする方法を紹介します。
以下のVBAコードは、1行目に見出しがあることを想定して、2行目以降を削除しています。
Copyをクリックするとコピーできます。
Sub sample() '見出し以外を削除 Sheets("Sheet1").Rows("2:" & Sheets("Sheet1").Cells.Rows.Count).ClearEnd Sub【コピペOK】シートのデータをクリアするclear_sheet_data関数
Copyをクリックするとコピーできます。
Public Function clear_sheet_data(ByVal sheetNames As Variant, Optional ByVal heading As Boolean = False, Optional ByVal clearRowNum As Long = 2) If IsArray(sheetNames) Then ' sheetNamesが配列の場合の処理 Dim sheetName As Variant For Each sheetName In sheetNames If heading Then ' headingがTrueの場合の処理 Sheets(sheetName).Rows(clearRowNum & ":" & Sheets(sheetName).Cells.Rows.Count).Clear Else ' headingがFalseの場合の処理 Sheets(sheetName).Cells.Clear End If Next sheetName End If If Not (IsArray(sheetNames)) Then ' sheetNamesが配列でない場合の処理 If heading Then ' headingがTrueの場合の処理 Sheets(sheetNames).Rows(clearRowNum & ":" & Sheets(sheetNames).Cells.Rows.Count).Clear Else ' headingがFalseの場合の処理 Sheets(sheetNames).Cells.Clear End If End IfEnd Functionclear_sheet_data関数の使い方
第一引数のsheetNamesにシート名を指定することで、指定したシートのデータをクリアできます。
第二引数のheadingと第三引数のclearRowNumは、必要に応じて指定します。
各引数について
sheetNames (必須)
クリアしたいデータがあるシート名を指定します。
複数のシート名を指定する場合、配列で指定します。
指定するシートが1つの場合、配列か文字列で指定します。heading (省略可)
見出しを削除したくない場合、Trueを指定します。
引数を省略orFalseを指定した場合、シート全体がクリア対象になります。clearRowNum (省略可)
何行目からクリアするかを指定することができます。
※clearRowNumを指定する場合、第2引数のheadingにTrueを指定する必要があります。
例として3を指定した場合、1,2行目は削除されず、3行目以降が削除されます。
【サンプルコード】VBAでシートのデータをクリアする実例
以下のVBAコードは、Sheet1のデータをクリアしています。
Copyをクリックするとコピーできます。
Sub sample() Call clear_sheet_data("sheet1")End SubPublic Function clear_sheet_data(ByVal sheetNames As Variant, Optional ByVal heading As Boolean = False, Optional ByVal clearRowNum As Long = 2) If IsArray(sheetNames) Then ' sheetNamesが配列の場合の処理 Dim sheetName As Variant For Each sheetName In sheetNames If heading Then ' headingがTrueの場合の処理 Sheets(sheetName).Rows(clearRowNum & ":" & Sheets(sheetName).Cells.Rows.Count).Clear Else ' headingがFalseの場合の処理 Sheets(sheetName).Cells.Clear End If Next sheetName End If If Not (IsArray(sheetNames)) Then ' sheetNamesが配列でない場合の処理 If heading Then ' headingがTrueの場合の処理 Sheets(sheetNames).Rows(clearRowNum & ":" & Sheets(sheetNames).Cells.Rows.Count).Clear Else ' headingがFalseの場合の処理 Sheets(sheetNames).Cells.Clear End If End IfEnd Function【サンプルコード】VBAで行数を指定してシートのデータをクリアする実例
以下のVBAコードは、Sheet1とSheet2の2行目以降のデータをクリアしています。
Copyをクリックするとコピーできます。
Sub sample() Dim sheetList As Variant sheetList = Array("sheet1", "sheet2") Call clear_sheet_data(sheetList, True, 2)End SubPublic Function clear_sheet_data(ByVal sheetNames As Variant, Optional ByVal heading As Boolean = False, Optional ByVal clearRowNum As Long = 2) If IsArray(sheetNames) Then ' sheetNamesが配列の場合の処理 Dim sheetName As Variant For Each sheetName In sheetNames If heading Then ' headingがTrueの場合の処理 Sheets(sheetName).Rows(clearRowNum & ":" & Sheets(sheetName).Cells.Rows.Count).Clear Else ' headingがFalseの場合の処理 Sheets(sheetName).Cells.Clear End If Next sheetName End If If Not (IsArray(sheetNames)) Then ' sheetNamesが配列でない場合の処理 If heading Then ' headingがTrueの場合の処理 Sheets(sheetNames).Rows(clearRowNum & ":" & Sheets(sheetNames).Cells.Rows.Count).Clear Else ' headingがFalseの場合の処理 Sheets(sheetNames).Cells.Clear End If End IfEnd FunctionExcel VBAでシートを初期化する方法
Cells.Deleteを使用することでシートを初期化することができます。
ショートカットキー「Ctrl + A」で全セルを選択し、「Ctrl + -」で削除した場合と同じ挙動になります。
そのため、セルの幅、高さも初期化されます。
【実装コード】シートを初期化する
以下のVBAコードは、Sheet1を初期化しています。
Copyをクリックするとコピーできます。
Sub sample() 'シートを初期化 Sheets("Sheet1").Cells.DeleteEnd Sub【実装コード】範囲指定して初期化する
以下のVBAコードは、1行目に見出しがあることを想定して、2行目以降のセルを初期化しています。
Copyをクリックするとコピーできます。
Sub sample() '見出し以外のセルを初期化 Sheets("Sheet1").Rows("2:" & Cells.Rows.Count).DeleteEnd Sub【コピペOK】シートのデータを初期化するdelete_sheet_data関数
Copyをクリックするとコピーできます。
Public Function delete_sheet_data(ByVal sheetNames As Variant, Optional ByVal heading As Boolean = False, Optional ByVal deleteRowNum As Long = 2) If IsArray(sheetNames) Then ' sheetNamesが配列の場合の処理 Dim sheetName As Variant For Each sheetName In sheetNames If heading Then ' headingがTrueの場合の処理 Sheets(sheetName).Rows(deleteRowNum & ":" & Sheets(sheetName).Cells.Rows.Count).Delete Else ' headingがFalseの場合の処理 Sheets(sheetName).Cells.Delete End If Next sheetName End If If Not (IsArray(sheetNames)) Then ' sheetNamesが配列でない場合の処理 If heading Then ' headingがTrueの場合の処理 Sheets(sheetNames).Rows(deleteRowNum & ":" & Sheets(sheetNames).Cells.Rows.Count).Delete Else ' headingがFalseの場合の処理 Sheets(sheetNames).Cells.Delete End If End IfEnd Functiondelete_sheet_data関数の使い方
第一引数のsheetNamesにシート名を指定することで、指定したシートを初期化することができます。
第二引数のheadingと第三引数のdeleteRowNumは、必要に応じて指定します。
各引数について
sheetNames (必須)
初期化したいシートのシート名を指定します。
複数のシート名を指定する場合、配列で指定します。
指定するシートが1つの場合、配列か文字列で指定します。heading (省略可)
見出しを削除したくない場合、Trueを指定します。
引数を省略orFalseを指定した場合、シート全体が初期化対象になります。deleteRowNum (省略可)
何行目から初期化するかを指定することができます。
※deleteRowNumを指定する場合、第2引数のheadingにTrueを指定する必要があります。
例として3を指定した場合、1,2行目は初期化されず、3行目以降が初期化されます。
【サンプルコード】シートのデータを初期化する実例
以下のVBAコードは、Sheet1を初期化しています。
Copyをクリックするとコピーできます。
Sub sample() Call delete_sheet_data("sheet1")End SubPublic Function delete_sheet_data(ByVal sheetNames As Variant, Optional ByVal heading As Boolean = False, Optional ByVal deleteRowNum As Long = 2) If IsArray(sheetNames) Then ' sheetNamesが配列の場合の処理 Dim sheetName As Variant For Each sheetName In sheetNames If heading Then ' headingがTrueの場合の処理 Sheets(sheetName).Rows(deleteRowNum & ":" & Sheets(sheetName).Cells.Rows.Count).Delete Else ' headingがFalseの場合の処理 Sheets(sheetName).Cells.Delete End If Next sheetName End If If Not (IsArray(sheetNames)) Then ' sheetNamesが配列でない場合の処理 If heading Then ' headingがTrueの場合の処理 Sheets(sheetNames).Rows(deleteRowNum & ":" & Sheets(sheetNames).Cells.Rows.Count).Delete Else ' headingがFalseの場合の処理 Sheets(sheetNames).Cells.Delete End If End IfEnd Function【サンプルコード】行数を指定してシートのデータを初期化する実例
以下のVBAコードは、Sheet1とSheet2の2行目以降を初期化しています。
Copyをクリックするとコピーできます。
Sub sample() Dim sheetList As Variant sheetList = Array("sheet1", "sheet2") Call delete_sheet_data(sheetList, True, 2)End SubPublic Function delete_sheet_data(ByVal sheetNames As Variant, Optional ByVal heading As Boolean = False, Optional ByVal deleteRowNum As Long = 2) If IsArray(sheetNames) Then ' sheetNamesが配列の場合の処理 Dim sheetName As Variant For Each sheetName In sheetNames If heading Then ' headingがTrueの場合の処理 Sheets(sheetName).Rows(deleteRowNum & ":" & Sheets(sheetName).Cells.Rows.Count).Delete Else ' headingがFalseの場合の処理 Sheets(sheetName).Cells.Delete End If Next sheetName End If If Not (IsArray(sheetNames)) Then ' sheetNamesが配列でない場合の処理 If heading Then ' headingがTrueの場合の処理 Sheets(sheetNames).Rows(deleteRowNum & ":" & Sheets(sheetNames).Cells.Rows.Count).Delete Else ' headingがFalseの場合の処理 Sheets(sheetNames).Cells.Delete End If End IfEnd Functionまとめ
この記事では、Excel VBAでシートのデータをクリア・初期化する方法について詳しく解説しました。
今回学んだポイント
データクリア(Cells.Clear)
セルの値、数式、書式、コメントを削除。
列幅や行の高さは保持されるため、レイアウトを維持したまま中身だけを初期化できる。シート初期化(Cells.Delete)
セルの値、数式、書式、コメントに加えて、セルの幅や高さも初期化される。
完全にシートをリセットしたい場合に使用。範囲指定クリア
見出し行を残して2行目以降のみをクリアするなど、柔軟な範囲指定が可能。
業務でよく使われるテクニック。便利な関数
clear_sheet_dataとdelete_sheet_data関数を使えば、複数シートの一括処理や見出し保持が簡単に実現できる。
これらの方法を適切に使い分けることで、Excel VBAでの作業効率が大幅に向上します。
特に、Cells.ClearとCells.Deleteの違いを理解し、目的に応じて使い分けることが重要です。
今回紹介した関数は、そのままコピーして使用できるので、ぜひ業務で活用してみてください。
VBAを使った自動化により、手作業の時間を大幅に短縮できます。
