Vilasは、ユーザーがセルを削除できないようにワークシートを保護できることを知っています。ただし、ワークシート保護を使用せずにセルが削除されないようにする必要があります。 (Vilasはセルの内容のクリアについてではなく、周囲のセルを左または上に移動する必要があるようにセルを実際に削除することについて話します。)ワークシートを保護せずに、ユーザーがセルを削除できないようにする方法があるかどうか疑問に思います。

Excelでこれを行う直接的な方法はありません。 Excelが、セルが削除されるたびに呼び出されるイベントハンドラーを作成する方法を提供してくれれば便利ですが、そうではありません。 (Worksheet_Changeイベントは、セルの内容が変更されるたびにトリガーされるようですが、セルが完全に削除されるとトリガーされません。)このため、マクロを使用してセルが削除されないようにすることはできません。

私たちが見つけた最善の解決策は、Excelが配列数式を処理する方法の癖を利用することです。例として、A1:L37の範囲のデータがあり、この範囲内のセルを削除したくないと仮定します。次の一般的な手順に従ってください:

。保護するブロックのすぐ右側にあるセルの範囲を選択します。この場合、セルM1:M37を選択します。

。 = “”と入力し、Shift + Ctrl + Enterを押します。これで、M1:M37の全範囲をとる何もしない配列数式が作成されました。

。保護するセルのブロックのすぐ下にあるセルの範囲を選択します。この場合、セルA38:L38を選択します。

。 = “”と入力し、Shift + Ctrl + Enterを押します。これで、A38:L38の全範囲をとる何もしない配列数式が作成されました。

この時点で、データブロック(A1:L37)内のセルを削除したり、行1〜37または列A〜Lを削除したりすることはできません。

試行するたびに、Excelは「配列の一部を変更することはできません」というメッセージを表示します。データブロック内のセル、行、または列を削除する唯一の方法は、最初に影響を受ける配列数式を削除することです。つまり、最初に列Mまたは行38を削除する必要があります。

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(10255)は、Microsoft Excel 97、2000、2002、および2003に適用されます。

Excel(Excel 2007以降)のリボンインターフェイスに関するこのヒントのバージョンは、次の場所にあります:

link:/ excelribbon-Stopping_the_Deletion_of_Cells [セルの削除の停止]