Excelのデータ検証機能を使用すると、別のセルの内容に基づいて、セルに入力する内容を制限できます。たとえば、セルA1にある日付に基づいて、セルA2に入るものを簡単に制限できます。次の手順に従ってください:

。セルA2を選択します。

。 [データ]メニューから[検証]を選択します。 Excelに[データ検証]ダイアログボックスが表示されます。

。 [設定]タブが表示されていることを確認します。 (図1を参照)

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

。 [データ]ドロップダウンリストを使用して、[大なり記号]または[等しい]を選択します。

。 [開始日]ボックスに= A1と入力します。これは、日付がセルA1にある日付以上である必要があることをExcelに通知します。

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

これで、セルA1の日付よりも前の日付をセルA2に入力しようとすると、Excelにエラーメッセージが表示され、日付の入力が許可されなくなります。

ただし、セルA1に入力できる日付を制限したい場合はどうなりますか?たとえば、日付4/1/04をセルA1に入力し、A1に入力する次の日付が4/1/04より前でないことを確認する場合です。 4/15/04などの日付をセルA1に入力すると問題ありませんが、次にセルA1に日付を入力するときは、4/15/04より前に日付を入力する必要はありません。つまり、セルA1が現在A1にある日付より後の日付のみを受け入れることができるようにする必要があります。

これは少し粘着性があります。上記の手順を実行しても、手順1でセルA1を選択すると、データ検証は機能しません。どうして?セルA1に入力した日付は、常にA1に入力した日付以上になるため、Excelは、データ検証を行うときにA1の前の日付と比較しません。

この問題を解決する唯一の方法は、2つのマクロを使用することです。まず、次のマクロを通常のモジュールに配置します。

Sub Date_Validation()

Dim dteDate As Date     Dim strDate As String

With Range("A1")

'   Memo original date         dteDate = CDate(.Text)

'   Create date string         strDate = Format(dteDate, "m\/d\/yy")

With .Validation         '   Delete old settings             .Delete         '   Set new data validation             .Add _               Type:=xlValidateDate, _               AlertStyle:=xlValidAlertStop, _               Operator:=xlGreaterEqual, _               Formula1:=strDate

.IgnoreBlank = False             .InCellDropdown = True             .InputTitle = ""

.ErrorTitle = "Invalid Date Entry"

.InputMessage = ""

.ErrorMessage = _               "Date is older than the previous date (" & _               dteDate & ")."

.ShowInput = True             .ShowError = True         End With     End With End Sub

このマクロは、ワークシートに変更が加えられるたびにトリガーされるように、ワークシートのコードウィンドウに配置された別のマクロによって呼び出される必要があります。

Private Sub Worksheet_Change(ByVal Target As Range)

On Error Resume Next     If Target = Range("A1") Then Date_Validation End Sub

これらのマクロが機能する方法は非常に興味深いものです。後者はワークシートのコードウィンドウに配置するため、ワークシートに変更が加えられるたびにトリガーされます。変更されるセルがA1の場合、Date_Validationマクロが実行されます。

Date_Validationマクロは、セルA1から日付を取得し、セルのデータ検証ルールを作成します。これですべてです。現在セルにある日付よりも前の日付をセルに入力できないようにするデータ検証ルールを設定します。

マクロの利点は、データ検証ルールが有効になると、次にセルA1が変更されたときに、Worksheet_Changeイベントが発生する前にデータ検証ルールがトリガーされることです。したがって、データ検証ルールは、現在の日付よりも大きい日付のみを入力できることを確認します。データ検証がクリアされると、マクロはデータ検証ルールのリセットを処理するため、新しく入力された日付と比較されます。

注:

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

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

このヒント(2960)は、Microsoft Excel 97、2000、2002、および2003に適用されます。Excel(Excel 2007以降)のリボンインターフェイス用のこのヒントのバージョンは、次の場所にあります。