スティーブンは、毎日午後4時から午後6時30分までの間、誰もワークシートに情報を入力しないようにする必要があります。彼は、データ検証を使用して、ユーザーが毎日特定の時間にワークシートに情報を入力するのを防ぐことができるかどうか疑問に思います。

これについては、2つの一般的な方法があります。 1つのアプローチは、データ検証を使用して時間をチェックし、データ入力を許可または禁止することです。

。ワークシートのすべてのセルを選択します。

。リボンの[データ]タブを表示します。

。 [データツール]グループの[データ検証]ツールをクリックします。 Excelに[データ検証]ダイアログボックスが表示されます。 (図1を参照)

。 [許可]ドロップダウンリストを使用して、[カスタム]を選択します。

。 [数式]ボックスに次のように入力します。

。必要に応じて、[エラーアラート]タブで変更を加えます。

。 [OK]をクリックします。

このアプローチの問題は、最初のステップにあります。データがセルに入力されないようにするには、ワークシートのすべてのセルを選択する必要があります。さらに、いずれかのセルですでにデータ検証を使用している場合、このアプローチはそれらの設定を上書きします。

これらの理由から、マクロベースのアプローチを使用する方がよい場合があります。このようなアプローチはすべて、イベントハンドラーを利用して、変更をチェックできます。以下は、Worksheet_Changeイベントに依存しています。これは、Excelがワークシートの変更を検出した場合にのみトリガーされることを意味します。

Private Sub Worksheet_Change(ByVal Target As Range)

Dim sMsg As String

sMsg = "No entries allowed between 4:00 pm and 6:30 pm!"

If Time >= "4:00:00 PM" And Time <= "6:30:00 PM" Then         MsgBox sMsg, vbCritical         With Application             .EnableEvents = False             .Undo   ' This undoes the change the person made             .EnableEvents = True         End With     End If End Sub

基本的に、ワークシートに変更があるたびに、ハンドラーはそれが午後4時から午後6時30分の間であるかどうかを確認します。そうである場合は、エラーを示すメッセージボックスが表示され、.Undoメソッドを使用して試行された変更をロールバックします。

必要に応じて、別のアプローチを取り、禁止された時間内であればワークシートを保護することができます:

Private Sub Worksheet_Activate()

If Time >= "4:00:00 PM" And Time <= "6:30:00 PM" Then         ActiveSheet.Protect         MsgBox "Worksheet is protected."

Else         ActiveSheet.Unprotect         MsgBox "You are free to edit now."

End If End Sub

Worksheet_Activateイベントハンドラーは、ワークシートがアクティブ化(選択)されるたびに呼び出されます。ワークシートが禁止時間外にアクティブ化された場合、保護されません。もちろん、ユーザーは禁止されている時間でも手動でワークシートの保護を解除できるため、前述のように、変更が試行されるたびにトリガーされるアプローチと組み合わせてこのアプローチを使用することをお勧めします。

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

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