Excel VBAでシートのデータをクリアする方法とシートを初期化する方法を解説します。
また、範囲を指定してシートのデータをクリアする方法と初期化する方法も紹介します。
実務でもよく使用するため、関数化してコピペで使用できるようにしました。
シートのデータをクリアする方法
Cells.Clear
を使用することでシートのデータをクリアすることができます。
Cells.Clear
は、セル自体を保持したまま、値、書式、コメントなどを削除することができます。
セル自体は削除されないため、セルの幅や高さは保持されたままです。
Cells.Clear
のClear
メソッドを、以下のメソッドに変更することも可能です。
- メソッド
- 説明
- ClearComments
- コメントを削除
- ClearContents
- 文字と数式を削除
- ClearFormats
- 書式設定を削除
- ClearOutline
- アウトラインを削除
【実装コード】シートのデータをクリアする
以下のコードはSheet1のデータを削除しています。
Sub sample()
'シートのデータを削除
Sheets("Sheet1").Cells.Clear
End Sub
【実装コード】シートのデータを範囲指定してクリアする
範囲指定してクリアする方法として、私が業務でよく使う見出し以外をクリアする方法を紹介します。
以下のコードは、1行目に見出しがあることを想定して、2行目以降を削除しています。
Sub sample()
'見出し以外を削除
Sheets("Sheet1").Rows("2:" & Cells.Rows.Count).Clear
End Sub
【実務向け実装コード】シートのデータクリアを関数化
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 If
End Function
clear_sheet_data(sheetNames, heading, clearRowNum)関数の使用方法
第一引数のsheetNames
にシート名を指定することで、指定したシートのデータをクリアすることができます。
第二引数のheading
と第三引数のclearRowNum
は必要に応じて指定します。
各引数について
sheetNames (必須)
クリアしたいデータがあるシート名を指定します。
複数のシート名を指定する場合、配列で指定します。
指定するシートが1つの場合、配列か文字列で指定します。heading (省略可)
見出しを削除したくない場合、True
を指定します。
引数を省略orFalse
を指定した場合、シート全体がクリア対象になります。clearRowNum (省略可)
何行目からクリアするかを指定することができます。
※clearRowNum
を指定する場合、第2引数のheading
にTrue
を指定する必要があります。
例として3
を指定した場合、1,2行目は削除されず、3行目以降が削除されます。
clear_sheet_data(sheetNames, heading, clearRowNum)関数の使用例1
以下のコードは、Sheet1のデータをクリアしています。
Sub sample()
Call clear_sheet_data("sheet1")
End Sub
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 If
End Function
clear_sheet_data(sheetNames, heading, clearRowNum)関数の使用例2
以下のコードは、Sheet1とSheet2の2行目以降をクリアしています。
Sub sample()
Dim sheetList As Variant
sheetList = Array("sheet1", "sheet2")
Call clear_sheet_data(sheetList, True, 2)
End Sub
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 If
End Function
シートを初期化する方法
Cells.Delete
を使用することでシートを初期化することができます。
ショートカットキー「Ctrl + a」で全体を選択し、「Ctrl + -」で選択されたセルを削除しているのと同じ挙動です。
そのため、セルの幅、高さも初期化されます。
【実装コード】シートを初期化する
以下のコードはSheet1を初期化しています。
Sub sample()
'シートを初期化
Sheets("Sheet1").Cells.Delete
End Sub
【実装コード】範囲指定して初期化する
範囲指定して初期化する方法として、私が業務でよく使う見出し以外のセルを初期化する方法を紹介します。
以下のコードは、1行目に見出しがあることを想定して、2行目以降のセルを初期化しています。
Sub sample()
'見出し以外のセルを初期化
Sheets("Sheet1").Rows("2:" & Cells.Rows.Count).Delete
End Sub
【実務向け実装コード】シートの初期化を関数化
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 If
End Function
delete_sheet_data(sheetNames, heading, deleteRowNum)関数の使用方法
第一引数のsheetNames
にシート名を指定することで、指定したシートを初期化することができます。
第二引数のheading
と第三引数のdeleteRowNum
は必要に応じて指定します。
各引数について
sheetNames (必須)
初期化したいシートのシート名を指定します。
複数のシート名を指定する場合、配列で指定します。
指定するシートが1つの場合、配列か文字列で指定します。heading (省略可)
見出しを削除したくない場合、True
を指定します。
引数を省略orFalse
を指定した場合、シート全体が初期化対象になります。deleteRowNum (省略可)
何行目から初期化するかを指定することができます。
※deleteRowNum
を指定する場合、第2引数のheading
にTrue
を指定する必要があります。
例として3
を指定した場合、1,2行目は初期化されず、3行目以降が初期化されます。
delete_sheet_data(sheetNames, heading, deleteRowNum)関数の使用例1
以下のコードは、Sheet1を初期化しています。
Sub sample()
Call delete_sheet_data("sheet1")
End Sub
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 If
End Function
delete_sheet_data(sheetNames, heading, deleteRowNum)関数の使用例2
以下のコードは、Sheet1とSheet2の2行目以降を初期化しています。
Sub sample()
Dim sheetList As Variant
sheetList = Array("sheet1", "sheet2")
Call delete_sheet_data(sheetList, True, 2)
End Sub
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 If
End Function
Excel VBAで初心者を卒業したいという方におすすめの1冊
もみじ
入門書レベルの内容を理解できる方におすすめの1冊で、実務で必要なスキルを学ぶことができます。
具体的には、コーディングの作法や効率的なコーディング方法、CSVやWeb上のデータとの連携方法、そしてマクロの高速化などの実務で役立つスキルを学ぶことができます。