他の人が使用するワークシートを開発しているときは、ワークブックを閉じる前に、特定のセルに入力されていることを確認することをお勧めします。これを行うための組み込み関数はExcelにありませんが、必要なチェックを行い、続行するためにユーザーを停止するマクロを作成できます。これは、BeforeCloseイベントに関連付けられた、かなり単純なマクロにすることができます。

BeforeCloseイベントは、ブックが何らかの方法で閉じられるたびにトリガーされます。秘訣は、イベントハンドラー内でCancelプロパティを設定することです。 [キャンセル]を[True]に設定すると、ブックの終了が停止し、変更しないままにすると、ブックは正常に終了します。

たとえば、次のマクロは、セルA1に何かが含まれているかどうかをチェックします。含まれている場合は、ブックが閉じられます。そうでない場合は、何かが不足していることがユーザーに通知され、クロージングがキャンセルされます。

Private Sub Workbook_BeforeClose(Cancel As Boolean)

If Cells(1, 1).Value = "" Then         MsgBox "Please fill cell A1"

Cancel = True     End If End Sub

必要に応じて、より複雑なマクロを作成できます。たとえば、チェックする必要のあるいくつかの異なるセルがある場合があります。次のバージョンでは、「必須」という名前の範囲をチェックして、範囲内の各セルに何かが含まれているかどうかを確認します。セルのいずれかが空の場合、ブックを保存または閉じることはできません。 (このマクロは、BeforeCloseイベント中だけでなく、BeforeSaveイベント中にもトリガーされます。)

これらの2つのイベントハンドラーは、ブックのコードシートに配置する必要があります:

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Cancel = ForceDataEntry()

End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, _   Cancel As Boolean)

Cancel = ForceDataEntry()

End Sub

イベントハンドラーがForceDataEntry関数を呼び出すことに注意してください。この関数は、通常のマクロモジュールに配置する必要があります:

Function ForceDataEntry() As Boolean     Dim rng As Range     Dim c As Variant     Dim rngCount As Integer     Dim CellCount As Integer

Set rng = Range("Mandatory")

rngCount = rng.Count

CellCount = 0     For Each c In rng         If Len(c) > 0 Then             CellCount = CellCount + 1         End If     Next c     ForceDataEntry = False     If CellCount <> rngCount Then ForceDataEntry = True End Function

マクロを必要とする実装(このような)には、1つの潜在的な問題があることに注意してください。ユーザーは、ブックの読み込み時にマクロを有効にしないことを決定できます。マクロを無効にしてワークブックを実行した場合でも、すべての必須セルに値が含まれていなくてもワークブックを保存できます。

注:

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

link:/ excelribbon-ExcelTipsMacros [ここをクリックして、新しいブラウザタブでその特別なページを開きます]

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

このヒント(9574)は、Microsoft Excel 2007、2010、2013、2016、2019、およびOffice 365のExcelに適用されます。Excelの古いメニューインターフェイス用のこのヒントのバージョンは、次の場所にあります。

link:/ excel-Requiring_Input [RequiringInput]