プログラミング

【PR】を含みます。

【Excel VBA】シートのデータをクリアする方法とシートを初期化する方法

シートのデータをクリアする方法とシートを初期化する方法 Excel VBA

Excel VBAでシートのデータをクリアする方法とシートを初期化する方法を解説します。

また、範囲を指定してシートのデータをクリアする方法と初期化する方法も紹介します。

実務でもよく使用するため、関数化してコピペで使用できるようにしました。

シートのデータをクリアする方法

Cells.Clearを使用することでシートのデータをクリアすることができます。

Cells.Clearは、セル自体を保持したまま、値、書式、コメントなどを削除することができます。

セル自体は削除されないため、セルの幅や高さは保持されたままです。

Cells.ClearClearメソッドを、以下のメソッドに変更することも可能です。

メソッド
説明
ClearComments
コメントを削除
ClearContents
文字と数式を削除
ClearFormats
書式設定を削除
ClearOutline
アウトラインを削除

【実装コード】シートのデータをクリアする

以下のコードはSheet1のデータを削除しています。

VBA
Copy
  1. Sub sample()
  2.     'シートのデータを削除
  3.     Sheets("Sheet1").Cells.Clear
  4. End Sub

【実装コード】シートのデータを範囲指定してクリアする

範囲指定してクリアする方法として、私が業務でよく使う見出し以外をクリアする方法を紹介します。

以下のコードは、1行目に見出しがあることを想定して、2行目以降を削除しています。

VBA
Copy
  1. Sub sample()
  2.     '見出し以外を削除
  3.     Sheets("Sheet1").Rows("2:" & Cells.Rows.Count).Clear
  4. End Sub

【実務向け実装コード】シートのデータクリアを関数化

VBA
Copy
  1. Public Function clear_sheet_data(ByVal sheetNames As Variant, Optional ByVal heading As Boolean = False, Optional ByVal clearRowNum As Long = 2)
  2.     If IsArray(sheetNames) Then
  3.         ' sheetNamesが配列の場合の処理
  4.         Dim sheetName As Variant
  5.         For Each sheetName In sheetNames
  6.             If heading Then
  7.                 ' headingがTrueの場合の処理
  8.                 Sheets(sheetName).Rows(clearRowNum & ":" & Sheets(sheetName).Cells.Rows.Count).Clear
  9.             Else
  10.                 ' headingがFalseの場合の処理
  11.                 Sheets(sheetName).Cells.Clear
  12.             End If
  13.         Next sheetName
  14.     End If
  15.     If Not (IsArray(sheetNames)) Then
  16.         ' sheetNamesが配列でない場合の処理
  17.         If heading Then
  18.             ' headingがTrueの場合の処理
  19.             Sheets(sheetNames).Rows(clearRowNum & ":" & Sheets(sheetNames).Cells.Rows.Count).Clear
  20.         Else
  21.             ' headingがFalseの場合の処理
  22.             Sheets(sheetNames).Cells.Clear
  23.         End If
  24.     End If
  25. End Function

clear_sheet_data(sheetNames, heading, clearRowNum)関数の使用方法

第一引数のsheetNamesにシート名を指定することで、指定したシートのデータをクリアすることができます。

第二引数のheadingと第三引数のclearRowNumは必要に応じて指定します。

各引数について

  1. sheetNames (必須)
    クリアしたいデータがあるシート名を指定します。
    複数のシート名を指定する場合、配列で指定します。
    指定するシートが1つの場合、配列か文字列で指定します。

  2. heading (省略可)
    見出しを削除したくない場合、Trueを指定します。
    引数を省略orFalseを指定した場合、シート全体がクリア対象になります。

  3. clearRowNum (省略可)
    何行目からクリアするかを指定することができます。
    clearRowNumを指定する場合、第2引数のheadingTrueを指定する必要があります。

    例として3を指定した場合、1,2行目は削除されず、3行目以降が削除されます。

clear_sheet_data(sheetNames, heading, clearRowNum)関数の使用例1

以下のコードは、Sheet1のデータをクリアしています。

VBA
Copy
  1. Sub sample()
  2.     Call clear_sheet_data("sheet1")
  3. End Sub
  4. Public Function clear_sheet_data(ByVal sheetNames As Variant, Optional ByVal heading As Boolean = False, Optional ByVal clearRowNum As Long = 2)
  5.     If IsArray(sheetNames) Then
  6.         ' sheetNamesが配列の場合の処理
  7.         Dim sheetName As Variant
  8.         For Each sheetName In sheetNames
  9.             If heading Then
  10.                 ' headingがTrueの場合の処理
  11.                 Sheets(sheetName).Rows(clearRowNum & ":" & Sheets(sheetName).Cells.Rows.Count).Clear
  12.             Else
  13.                 ' headingがFalseの場合の処理
  14.                 Sheets(sheetName).Cells.Clear
  15.             End If
  16.         Next sheetName
  17.     End If
  18.     If Not (IsArray(sheetNames)) Then
  19.         ' sheetNamesが配列でない場合の処理
  20.         If heading Then
  21.             ' headingがTrueの場合の処理
  22.             Sheets(sheetNames).Rows(clearRowNum & ":" & Sheets(sheetNames).Cells.Rows.Count).Clear
  23.         Else
  24.             ' headingがFalseの場合の処理
  25.             Sheets(sheetNames).Cells.Clear
  26.         End If
  27.     End If
  28. End Function

clear_sheet_data(sheetNames, heading, clearRowNum)関数の使用例2

以下のコードは、Sheet1とSheet2の2行目以降をクリアしています。

VBA
Copy
  1. Sub sample()
  2.     Dim sheetList As Variant
  3.     sheetList = Array("sheet1", "sheet2")
  4.     Call clear_sheet_data(sheetList, True, 2)
  5. End Sub
  6. Public Function clear_sheet_data(ByVal sheetNames As Variant, Optional ByVal heading As Boolean = False, Optional ByVal clearRowNum As Long = 2)
  7.     If IsArray(sheetNames) Then
  8.         ' sheetNamesが配列の場合の処理
  9.         Dim sheetName As Variant
  10.         For Each sheetName In sheetNames
  11.             If heading Then
  12.                 ' headingがTrueの場合の処理
  13.                 Sheets(sheetName).Rows(clearRowNum & ":" & Sheets(sheetName).Cells.Rows.Count).Clear
  14.             Else
  15.                 ' headingがFalseの場合の処理
  16.                 Sheets(sheetName).Cells.Clear
  17.             End If
  18.         Next sheetName
  19.     End If
  20.     If Not (IsArray(sheetNames)) Then
  21.         ' sheetNamesが配列でない場合の処理
  22.         If heading Then
  23.             ' headingがTrueの場合の処理
  24.             Sheets(sheetNames).Rows(clearRowNum & ":" & Sheets(sheetNames).Cells.Rows.Count).Clear
  25.         Else
  26.             ' headingがFalseの場合の処理
  27.             Sheets(sheetNames).Cells.Clear
  28.         End If
  29.     End If
  30. End Function

シートを初期化する方法

Cells.Deleteを使用することでシートを初期化することができます。

ショートカットキー「Ctrl + a」で全体を選択し、「Ctrl + -」で選択されたセルを削除しているのと同じ挙動です。

そのため、セルの幅、高さも初期化されます。

【実装コード】シートを初期化する

以下のコードはSheet1を初期化しています。

VBA
Copy
  1. Sub sample()
  2.     'シートを初期化
  3.     Sheets("Sheet1").Cells.Delete
  4. End Sub

【実装コード】範囲指定して初期化する

範囲指定して初期化する方法として、私が業務でよく使う見出し以外のセルを初期化する方法を紹介します。

以下のコードは、1行目に見出しがあることを想定して、2行目以降のセルを初期化しています。

VBA
Copy
  1. Sub sample()
  2.     '見出し以外のセルを初期化
  3.     Sheets("Sheet1").Rows("2:" & Cells.Rows.Count).Delete
  4. End Sub

【実務向け実装コード】シートの初期化を関数化

VBA
Copy
  1. Public Function delete_sheet_data(ByVal sheetNames As Variant, Optional ByVal heading As Boolean = False, Optional ByVal deleteRowNum As Long = 2)
  2.     If IsArray(sheetNames) Then
  3.         ' sheetNamesが配列の場合の処理
  4.         Dim sheetName As Variant
  5.         For Each sheetName In sheetNames
  6.             If heading Then
  7.                 ' headingがTrueの場合の処理
  8.                 Sheets(sheetName).Rows(deleteRowNum & ":" & Sheets(sheetName).Cells.Rows.Count).Delete
  9.             Else
  10.                 ' headingがFalseの場合の処理
  11.                 Sheets(sheetName).Cells.Delete
  12.             End If
  13.         Next sheetName
  14.     End If
  15.     If Not (IsArray(sheetNames)) Then
  16.         ' sheetNamesが配列でない場合の処理
  17.         If heading Then
  18.             ' headingがTrueの場合の処理
  19.             Sheets(sheetNames).Rows(deleteRowNum & ":" & Sheets(sheetNames).Cells.Rows.Count).Delete
  20.         Else
  21.             ' headingがFalseの場合の処理
  22.             Sheets(sheetNames).Cells.Delete
  23.         End If
  24.     End If
  25. End Function

delete_sheet_data(sheetNames, heading, deleteRowNum)関数の使用方法

第一引数のsheetNamesにシート名を指定することで、指定したシートを初期化することができます。

第二引数のheadingと第三引数のdeleteRowNumは必要に応じて指定します。

各引数について

  1. sheetNames (必須)
    初期化したいシートのシート名を指定します。
    複数のシート名を指定する場合、配列で指定します。
    指定するシートが1つの場合、配列か文字列で指定します。

  2. heading (省略可)
    見出しを削除したくない場合、Trueを指定します。
    引数を省略orFalseを指定した場合、シート全体が初期化対象になります。

  3. deleteRowNum (省略可)
    何行目から初期化するかを指定することができます。
    deleteRowNumを指定する場合、第2引数のheadingTrueを指定する必要があります。

    例として3を指定した場合、1,2行目は初期化されず、3行目以降が初期化されます。

delete_sheet_data(sheetNames, heading, deleteRowNum)関数の使用例1

以下のコードは、Sheet1を初期化しています。

VBA
Copy
  1. Sub sample()
  2.     Call delete_sheet_data("sheet1")
  3. End Sub
  4. Public Function delete_sheet_data(ByVal sheetNames As Variant, Optional ByVal heading As Boolean = False, Optional ByVal deleteRowNum As Long = 2)
  5.     If IsArray(sheetNames) Then
  6.         ' sheetNamesが配列の場合の処理
  7.         Dim sheetName As Variant
  8.         For Each sheetName In sheetNames
  9.             If heading Then
  10.                 ' headingがTrueの場合の処理
  11.                 Sheets(sheetName).Rows(deleteRowNum & ":" & Sheets(sheetName).Cells.Rows.Count).Delete
  12.             Else
  13.                 ' headingがFalseの場合の処理
  14.                 Sheets(sheetName).Cells.Delete
  15.             End If
  16.         Next sheetName
  17.     End If
  18.     If Not (IsArray(sheetNames)) Then
  19.         ' sheetNamesが配列でない場合の処理
  20.         If heading Then
  21.             ' headingがTrueの場合の処理
  22.             Sheets(sheetNames).Rows(deleteRowNum & ":" & Sheets(sheetNames).Cells.Rows.Count).Delete
  23.         Else
  24.             ' headingがFalseの場合の処理
  25.             Sheets(sheetNames).Cells.Delete
  26.         End If
  27.     End If
  28. End Function

delete_sheet_data(sheetNames, heading, deleteRowNum)関数の使用例2

以下のコードは、Sheet1とSheet2の2行目以降を初期化しています。

VBA
Copy
  1. Sub sample()
  2.     Dim sheetList As Variant
  3.     sheetList = Array("sheet1", "sheet2")
  4.     Call delete_sheet_data(sheetList, True, 2)
  5. End Sub
  6. Public Function delete_sheet_data(ByVal sheetNames As Variant, Optional ByVal heading As Boolean = False, Optional ByVal deleteRowNum As Long = 2)
  7.     If IsArray(sheetNames) Then
  8.         ' sheetNamesが配列の場合の処理
  9.         Dim sheetName As Variant
  10.         For Each sheetName In sheetNames
  11.             If heading Then
  12.                 ' headingがTrueの場合の処理
  13.                 Sheets(sheetName).Rows(deleteRowNum & ":" & Sheets(sheetName).Cells.Rows.Count).Delete
  14.             Else
  15.                 ' headingがFalseの場合の処理
  16.                 Sheets(sheetName).Cells.Delete
  17.             End If
  18.         Next sheetName
  19.     End If
  20.     If Not (IsArray(sheetNames)) Then
  21.         ' sheetNamesが配列でない場合の処理
  22.         If heading Then
  23.             ' headingがTrueの場合の処理
  24.             Sheets(sheetNames).Rows(deleteRowNum & ":" & Sheets(sheetNames).Cells.Rows.Count).Delete
  25.         Else
  26.             ' headingがFalseの場合の処理
  27.             Sheets(sheetNames).Cells.Delete
  28.         End If
  29.     End If
  30. End Function

Excel VBAで初心者を卒業したいという方におすすめの1冊

アイコン画像

もみじ

入門書レベルの内容を理解できる方におすすめの1冊で、実務で必要なスキルを学ぶことができます。

具体的には、コーディングの作法や効率的なコーディング方法、CSVやWeb上のデータとの連携方法、そしてマクロの高速化などの実務で役立つスキルを学ぶことができます。

-プログラミング
-,