Excel VBA入門 その103:Deleteで「エラー1004」になり削除できない原因・対処方法

エクセルVBA VBA



VBAでDeleteメソッドを使ってセルや行などを削除しようとするときに「エラー1004」になり、うまく削除できないことがあります。

今回は、Deleteメソッドを使って「エラー1004」になり削除できない原因・対処方法について徹底的に解説していきます。



Deleteで「エラー1004」になり削除できない原因・対処方法処方法

Deleteを実行するとエラー1004になり削除できない

Deleteで「エラー1004」になり削除できない原因

Deleteメソッドを使用したときに「実行時エラー1004」になってしまう原因として、以下のことが考えられます。

  1. シートが保護されている
  2. 共有ブックになっている
  3. ブックが壊れている
  4. 整数型(Integer)の範囲を超えている

それぞれの対処方法について、次の項目で説明していきます。

対処方法:1.シートが保護されている

Deleteメソッドを使ったときのエラー原因として一番多いのが「シートが保護されている」ことです。

シート全体の場合だけでなく、シートの一部の範囲のみ保護している場合にもエラーになってしまいます。

シート保護がかかっている場合に、エクセルで手動で削除しようとすると、以下のように「変更しようとしているセルやグラフは保護されている・・・」のエラーメッセージが表示されます。

エクセル上で手動で削除しようとすると、保護されている・・・のエラー文が表示される。

ですが、同じ動作をマクロで実行した場合は、以下のように「エラー1004、Range蔵ラスのDeleteメソッドが失敗しました。」とだけ表示され、「保護されている・・・」のエラー文が表示されません。

シートが保護されている理由でエラーになっていることを教えてくれない

エラー文でシートが保護されていることを教えてくれないので、まさかシートの保護が原因だと思いもよらず、エラーの底なし沼から出られなくなってしまうのです。

したがって、Deleteする前に、あらかじめシートの保護を解除して必要があります。

シートの保護解除の例:

Sub 行を削除()
    ActiveSheet.Unprotect 'シートの保護解除
    Rows(6).Delete
    ActiveSheet.Protect 'シートの保護設定
End Sub

Unprotectメソッドは、シートの保護がされていない状態で実行してもエラーにならないので、保護によるエラーが発生しないための保険で使用してもOKです。

対処方法:2.共有ブックになっている

ブックの共有を設定すると、セル範囲の挿入や削除ができなくなります。
※ 行や列の挿入や削除は可能です。

その他、ブックの共有においてDeleteに関係する機能の制限は以下のものがあります。

  • セル範囲の挿入や削除(行や列の挿入や削除は可能)
  • ワークシートの削除
  • セルの結合や結合したセルの解除
  • 図やその他のオブジェクトの挿入または変更
  • ハイパーリンクの挿入または変更

したがって、ブックの共有をオフにすることでDeleteが成功することがありますので、せひ試してみてください。

対処方法:3.ブックが壊れている

Excelブックが破損していることでエラーが発生することがまれにあります。

Excelブックの破損原因は、一概にこれというものはありません。

パソコンのスペックを超えた処理が原因であったり、エクセルのバージョンを超えたファイルの引継ぎが原因であったり・・・とさまざまな理由があります。

仮にExcelブックが壊れている可能性が考えられる場合は、一度新規ブックに同様のシート構成を作成して、同じマクロを実装して動作確認してみてるのも解決手段の一つになります。

対処方法:4.整数型(Integer)の範囲を超えている

変数の型で整数型(Integer型)を使用している場合は、「-32,768~32,767の整数」のみ使用できることになります。

したがって、例えば32,768行目をDeleteで削除しようとするとInteger型の範囲を超えているため、オーバーフローのエラーになってしまいます。

オーバーフローのエラーが出る

オーバーフローの場合は「実行時エラー6」が表示されることがほとんどです。

もし、変数の型に整数型(Integer型)を使っている場合にエラーが出てしまう場合は、t長整数型(Long型)の使用をオススメします。

長整数型の範囲は、「-2,147,483,648~2,147,483,647の整数」となっています。

エラー原因がどうしても判明しないときは、試してみる価値は少しはあります。

コメント

タイトルとURLをコピーしました