もくじ
Excel VBAを使って「シートのデータをクリアしたい」「初期化したい」と思ったことはありませんか?
この記事では、業務でよく使われるVBAのテクニックとして、シートのデータを簡単にクリア・初期化する方法をわかりやすく解説します。
Excel VBAでシートのデータをクリアする方法
Excel VBAを使えば、簡単にシート内のセルの値や書式などをクリアすることができます。
Cells.Clear
は、セルの値、数式、書式、コメントなどをすべて削除します。
ただし、セルの位置やサイズ(列幅や行の高さ)は保持されたままなので、レイアウトを維持したまま中身だけを初期化したい場合に便利です。
VBAではCells.Clear
以外にも、目的に応じて使い分けられる「Clear系メソッド」が用意されています。
以下に代表的なメソッドをまとめました。
メソッド | 説明 |
---|---|
ClearComments | コメントを削除 |
ClearContents | セルの値や数式だけを削除し、書式は残す |
ClearFormats | 値はそのままで、書式だけ削除したい場合に便利 |
ClearOutline | アウトラインを削除 |
【実装コード】シートのデータをクリアする
以下のVBAコードは、Sheet1のデータをクリアしています。
Sub sample()
'シートのデータを削除
Sheets("Sheet1").Cells.Clear
End Sub
【実装コード】シートのデータを範囲指定してクリアする
範囲を指定してデータをクリアする方法として、業務でよく使う見出し以外をクリアする方法を紹介します。
以下のVBAコードは、1行目に見出しがあることを想定して、2行目以降を削除しています。
Sub sample()
'見出し以外を削除
Sheets("Sheet1").Rows("2:" & Sheets("Sheet1").Cells.Rows.Count).Clear
End Sub
【コピペOK】シートのデータをクリアする関数(clear_sheet_data)
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 (必須)
クリアしたいデータがあるシート名を指定します。
複数のシート名を指定する場合、配列で指定します。
指定するシートが1つの場合、配列か文字列で指定します。heading (省略可)
見出しを削除したくない場合、True
を指定します。
引数を省略orFalse
を指定した場合、シート全体がクリア対象になります。clearRowNum (省略可)
何行目からクリアするかを指定することができます。
※clearRowNum
を指定する場合、第2引数のheading
にTrue
を指定する必要があります。
例として3
を指定した場合、1,2行目は削除されず、3行目以降が削除されます。
【サンプルコード】VBAでシートのデータをクリアする実例
以下のVBAコードは、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
【サンプルコード】VBAで行数を指定してシートのデータをクリアする実例
以下のVBAコードは、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
Excel VBAでシートを初期化する方法
Cells.Delete
を使用することでシートを初期化することができます。
ショートカットキー「Ctrl + A」で全セルを選択し、「Ctrl + -」で削除した場合と同じ挙動になります。
そのため、セルの幅、高さも初期化されます。
【実装コード】シートを初期化する
以下のVBAコードは、Sheet1を初期化しています。
Sub sample()
'シートを初期化
Sheets("Sheet1").Cells.Delete
End Sub
【実装コード】範囲指定して初期化する
以下のVBAコードは、1行目に見出しがあることを想定して、2行目以降のセルを初期化しています。
Sub sample()
'見出し以外のセルを初期化
Sheets("Sheet1").Rows("2:" & Cells.Rows.Count).Delete
End Sub
【コピペOK】シートのデータを初期化する関数(delete_sheet_data)
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 (必須)
初期化したいシートのシート名を指定します。
複数のシート名を指定する場合、配列で指定します。
指定するシートが1つの場合、配列か文字列で指定します。heading (省略可)
見出しを削除したくない場合、True
を指定します。
引数を省略orFalse
を指定した場合、シート全体が初期化対象になります。deleteRowNum (省略可)
何行目から初期化するかを指定することができます。
※deleteRowNum
を指定する場合、第2引数のheading
にTrue
を指定する必要があります。
例として3
を指定した場合、1,2行目は初期化されず、3行目以降が初期化されます。
【サンプルコード】シートのデータを初期化する実例
以下のVBAコードは、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
【サンプルコード】行数を指定してシートのデータを初期化する実例
以下のVBAコードは、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