プログラミング

【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.         
  6.         For Each sheetName In sheetNames
  7.             If heading Then
  8.                 ' headingがTrueの場合の処理
  9.                 Sheets(sheetName).Rows(clearRowNum & ":" & Sheets(sheetName).Cells.Rows.Count).Clear
  10.             Else
  11.                 ' headingがFalseの場合の処理
  12.                 Sheets(sheetName).Cells.Clear
  13.             End If
  14.         Next sheetName
  15.     End If
  16.     
  17.     If Not (IsArray(sheetNames)) Then
  18.         ' sheetNamesが配列でない場合の処理
  19.         If heading Then
  20.             ' headingがTrueの場合の処理
  21.             Sheets(sheetNames).Rows(clearRowNum & ":" & Sheets(sheetNames).Cells.Rows.Count).Clear
  22.         Else
  23.             ' headingがFalseの場合の処理
  24.             Sheets(sheetNames).Cells.Clear
  25.         End If
  26.     End If
  27. 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.  
  5. Public Function clear_sheet_data(ByVal sheetNames As Variant, Optional ByVal heading As Boolean = False, Optional ByVal clearRowNum As Long = 2)
  6.     If IsArray(sheetNames) Then
  7.         ' sheetNamesが配列の場合の処理
  8.         Dim sheetName As Variant
  9.         
  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.     
  21.     If Not (IsArray(sheetNames)) Then
  22.         ' sheetNamesが配列でない場合の処理
  23.         If heading Then
  24.             ' headingがTrueの場合の処理
  25.             Sheets(sheetNames).Rows(clearRowNum & ":" & Sheets(sheetNames).Cells.Rows.Count).Clear
  26.         Else
  27.             ' headingがFalseの場合の処理
  28.             Sheets(sheetNames).Cells.Clear
  29.         End If
  30.     End If
  31. 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.     
  5.     Call clear_sheet_data(sheetList, True, 2)
  6. End Sub
  7.  
  8. Public Function clear_sheet_data(ByVal sheetNames As Variant, Optional ByVal heading As Boolean = False, Optional ByVal clearRowNum As Long = 2)
  9.     If IsArray(sheetNames) Then
  10.         ' sheetNamesが配列の場合の処理
  11.         Dim sheetName As Variant
  12.         
  13.         For Each sheetName In sheetNames
  14.             If heading Then
  15.                 ' headingがTrueの場合の処理
  16.                 Sheets(sheetName).Rows(clearRowNum & ":" & Sheets(sheetName).Cells.Rows.Count).Clear
  17.             Else
  18.                 ' headingがFalseの場合の処理
  19.                 Sheets(sheetName).Cells.Clear
  20.             End If
  21.         Next sheetName
  22.     End If
  23.     
  24.     If Not (IsArray(sheetNames)) Then
  25.         ' sheetNamesが配列でない場合の処理
  26.         If heading Then
  27.             ' headingがTrueの場合の処理
  28.             Sheets(sheetNames).Rows(clearRowNum & ":" & Sheets(sheetNames).Cells.Rows.Count).Clear
  29.         Else
  30.             ' headingがFalseの場合の処理
  31.             Sheets(sheetNames).Cells.Clear
  32.         End If
  33.     End If
  34. 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.         
  6.         For Each sheetName In sheetNames
  7.             If heading Then
  8.                 ' headingがTrueの場合の処理
  9.                 Sheets(sheetName).Rows(deleteRowNum & ":" & Sheets(sheetName).Cells.Rows.Count).Delete
  10.             Else
  11.                 ' headingがFalseの場合の処理
  12.                 Sheets(sheetName).Cells.Delete
  13.             End If
  14.         Next sheetName
  15.     End If
  16.     
  17.     If Not (IsArray(sheetNames)) Then
  18.         ' sheetNamesが配列でない場合の処理
  19.         If heading Then
  20.             ' headingがTrueの場合の処理
  21.             Sheets(sheetNames).Rows(deleteRowNum & ":" & Sheets(sheetNames).Cells.Rows.Count).Delete
  22.         Else
  23.             ' headingがFalseの場合の処理
  24.             Sheets(sheetNames).Cells.Delete
  25.         End If
  26.     End If
  27. 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.  
  5. Public Function delete_sheet_data(ByVal sheetNames As Variant, Optional ByVal heading As Boolean = False, Optional ByVal deleteRowNum As Long = 2)
  6.     If IsArray(sheetNames) Then
  7.         ' sheetNamesが配列の場合の処理
  8.         Dim sheetName As Variant
  9.         
  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.     
  21.     If Not (IsArray(sheetNames)) Then
  22.         ' sheetNamesが配列でない場合の処理
  23.         If heading Then
  24.             ' headingがTrueの場合の処理
  25.             Sheets(sheetNames).Rows(deleteRowNum & ":" & Sheets(sheetNames).Cells.Rows.Count).Delete
  26.         Else
  27.             ' headingがFalseの場合の処理
  28.             Sheets(sheetNames).Cells.Delete
  29.         End If
  30.     End If
  31. 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.     
  5.     Call delete_sheet_data(sheetList, True, 2)
  6. End Sub
  7.  
  8. Public Function delete_sheet_data(ByVal sheetNames As Variant, Optional ByVal heading As Boolean = False, Optional ByVal deleteRowNum As Long = 2)
  9.     If IsArray(sheetNames) Then
  10.         ' sheetNamesが配列の場合の処理
  11.         Dim sheetName As Variant
  12.         
  13.         For Each sheetName In sheetNames
  14.             If heading Then
  15.                 ' headingがTrueの場合の処理
  16.                 Sheets(sheetName).Rows(deleteRowNum & ":" & Sheets(sheetName).Cells.Rows.Count).Delete
  17.             Else
  18.                 ' headingがFalseの場合の処理
  19.                 Sheets(sheetName).Cells.Delete
  20.             End If
  21.         Next sheetName
  22.     End If
  23.     
  24.     If Not (IsArray(sheetNames)) Then
  25.         ' sheetNamesが配列でない場合の処理
  26.         If heading Then
  27.             ' headingがTrueの場合の処理
  28.             Sheets(sheetNames).Rows(deleteRowNum & ":" & Sheets(sheetNames).Cells.Rows.Count).Delete
  29.         Else
  30.             ' headingがFalseの場合の処理
  31.             Sheets(sheetNames).Cells.Delete
  32.         End If
  33.     End If
  34. End Function

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

アイコン画像

もみじ

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

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

-プログラミング
-,