クリスは、仕事で、いくつかのマクロを含む大きなワークシートを持っています。これらの1つはセルのブロックを削除し、残りを上に移動します。ただし、ユーザーがマクロを使用せず、代わりに手動でブロックを削除する場合があります。削除によってセルが上ではなく左に移動すると、災害になります。

クリスは、マクロを使用してセルを上向きに移動させ、セルを手動で左に移動できないようにする方法があるかどうか疑問に思います。

Excelの多くのものと同様に、この問題に取り組む方法は複数あります。最終的に選択されるアプローチは、ワークシート内の情報の性質と、許可または禁止する内容によって異なるため、ここで詳細を深く掘り下げることはできません。ただし、次のセクションでは、自分に最適なアプローチを選択するために必要なキーを提供する場合があります。

ワークシートを保護する

簡単な(そして効果的な)アプローチは、ワークシートを保護できるように設計することです。もちろん、ユーザーが情報を入力する必要のあるセルが保護されていないことを確認しますが、そうでない場合、マクロはワークシートがアクティブ化されたときに保護されていることを確認できます。

これにより、ユーザーがワークシートからセルを手動で削除する可能性がなくなります。

これは、セルの範囲を削除する必要がある場合、ユーザーは(保護によって)削除するマクロを選択することを強制されることを意味します。その後、マクロはワークシートの保護を解除し、セルの範囲を削除して、再保護することができます。

削除の傍受

別のマクロベースのアプローチは、BeforeDeleteイベントを操作して、実際に何が起こるかを制御することです。以下は、実際に使用するものの基礎となる可能性のある単純なイベントハンドラーです。

Private Sub Worksheet_BeforeDelete()

Dim delRng As Range     Dim selRng As Range

On Error Resume Next     Set delRng = Range("C2:D5")  ' Change the range to the block                                  ' of cells to be deleted (manually                                  ' or by macro)

Set selRng = Application.Selection  ' Cells selected manually                                         ' by the user     If MyRng.Address = delRng.Address Then         Selection.Delete shift:=xlUp     End If End Sub

イベントハンドラーは、削除したい範囲を、ユーザーが削除するように選択した範囲と単純に比較します。範囲が同じである場合、ハンドラーは範囲を削除して上に移動します。明らかに、監視する範囲に一致するようにdelRng変数に割り当てられた範囲を変更する必要があります。

削除キーの再マッピング

削除と言えば、Deleteキーを再マップして、必要な処理を実行することもできます。 ThisWorkbookコードモジュールに次のようなマクロを含めるだけです。

Private Sub Workbook_Open()

Application.OnKey "{DELETE}", "MyMacro()"

End Sub

つまり、ブックを開くと、Deleteキーが再マップされ、押されるたびにMyMacro(これを任意のマクロに変更)が自動的に実行されます。

このアプローチは、Deleteキーの押下にのみ影響することに注意してください。他の方法で行われた削除には影響しません。それらの場合でも、マクロはロジックを予測して処理する必要があります。

完全なアプローチ

それは私たちに完全なアプローチをもたらします。このアプローチは、ユーザーが削除を開始できるさまざまな方法すべてのリストを作成し、それらの方法を傍受することを意味します。リスト(およびインターセプト)には、Deleteキーの処理など、すでに説明したアプローチのいくつかを含める必要があります。また、ユーザーが右クリックしたとき、またはユーザーがリボンから削除オプションを選択したときに何が起こるかを無効化または変更する方法を理解する必要があります。

(ユーザーインターフェイスから削除関連のオプションを削除することもできます。)

削除方法の完全なリストをまとめて処理するのは面倒な場合があるため、このアプローチは非常に長くなる可能性があります。

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

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

このヒント(13632)は、Microsoft Excel 2007、2010、2013、2016、2019、およびOffice365のExcelに適用されます。