ダウンロード

入力チェック

値が正しい形式で入力されているかをチェックし、不正の場合は、再入力(または注意)を促すメッセージを表示。
ここでは、おもに入力規則条件付き書式を使用した入力チェックを行います。


目次
数字のチェック - 範囲、刻み
日付チェック  - 7日以前
日付チェック  - 平日のみ可
日付チェック  - 営業日のみ可
時刻のチェック - 15分刻み
文字のチェック - 指定文字不可
リストから入力 - 連動リスト
リストから入力 - 連続する参照リスト
重複チェック  - 同一文字列不可
入れ子関数の組み込み方法

サンプルのダウンロード(inCheck.zip)
リンクリスト
解答を 全て展開 折り畳む


数字のチェック − 範囲、刻み

小数点数 0以上24以下の数値

データ範囲
 最小値:0
 最大値:24

ユーザー定義 0以上24以下の数値


ユーザー定義 0以上24以下の数値、0.25刻み




日付チェック − 7日後以前

複雑な指定は、ユーザー設定で指定できます。

問題

セルB5に、本日以降、7日後以前の日付しか入力できないようにしてください。
以後、以前は、比較日を含みます。
本日が 2018/7/6 であれば、入力可能日は、2018/7/6,7,8,9,10,11,12 となります。


完成例

解答例

a.本日を含め以降の日付?  B5>=TODAY()
b.7日先以前?  B5<=(TODAY()+7)
  日付は1900/1/1を起点とした日の連番(日:整数部、時刻:小数部)なので、7日先の日付は7を加えた値となる。

条件は、aとbを共に満たすものであるので、AND関数を使用している。



日付チェック − 平日のみ可

問題

セルB5に、平日の日付のみ入力できるように、入力規則を設定してください。
平日とは、月曜〜金曜 とします。






完成例


解答例

曜日はWEEKDAY関数で求められます。
既定では、日付を入力パラメータで与えると、1〜7の数値が返り、
それぞれ、日曜〜土曜を意味します。

ただし、このままでは判定が面倒(2以上6以下)なので、関数の第二パラメータに「」を指定します。
「2」を指定することにより、基準曜日月曜となり(第二パラメータの既定値は「1」:日曜起点)、
戻り値1〜7は、それぞれ月曜〜日曜となり判定が楽(「5以下」で判定可になります。



日付チェック − 営業日のみ可

問題

日付には営業日だけが入力できるようにしてください。

営業日は、土日、祝日除いた日とします。
祝日は、右下の祝日表を使用します。名前:"祝日表"

営業日以外を入力すると、完成例のような警告メッセージが表示されるようにします。

完成例

解答例

=NETWORKDAYS.INTL(B10,B10,1,祝日表)
NETWORKDAYS.INTL は、指定期間内の営業日数を返します。
よって、本日(本日から本日まで)の営業日数が1(TRUE)であれば営業日と判定できます。
指定日が営業日であれば「」が返ります。
指定日が営業日でなければ、指定日と指定日の間の営業日は無いので「0」が返ることになります。

 上級>基礎>日付に関する小技集>日付営業日かを判定も参考


時刻のチェック 15分刻み

問題 − 15分刻み

時刻を15分刻みでしか入力できないように入力規則を設定してください。


完成例

解答例

15分刻みというのは、分を15で割った余りが0ということ。
ここでは、分はMINUTE(時刻)、余りはMOD(被除数,除数)を使用して取得。



文字のチェック − 指定文字不可

問題 スペース不可

スペース(半角、全角)が入力できないように「入力規則」を設定してください。


完成例

解答例

「スペースが不可」というのは、入力文字列の中にスペースが見つからなければOKということ。
ここでは、SEARCH(探す文字列,対象文字列)関数を使用してする。
関数からエラーが返る場合は、探す文字列が見つからなかったということ。
エラーを判定する関数は、ISERROR(式)

AND関数を使用して、半角スペースの検索、全角スペースの検索、ともにエラーになる場合が入力OKとなる。


リストから入力 − 連動リスト

INDIRECT関数を使用すると、対象アドレスを文字列として指定できます。

INDIRECT関数の便利なのは、範囲を名前(アドレス)でなく文字列で指定するため、

範囲名を可変にすることが出来ることです。

問題

分類から項目(果物/肉類/魚介類/野菜)を選択すると、
種類に分類に応じたリストが表示されるようにしてください。

完成例


解答例

分類で選んだ文字列をINDIRECT関数でアドレス(名前)に変換し、それを種類のリスト範囲に指定している。
これにより、分類で選んだ文字列に応じて、種類のリスト範囲が決まる


リストから入力 − 連続する参照リスト

問題

種類のリストが下図のように連続して連結されている場合は、少々面倒です。

ここでは、種類のリスト(H4:I19)(赤枠)には"種類"という名前を付けています(シート内のみ有効)
(項目の追加削除ができるように、少し大きめに範囲を設定)

分類から項目を選択すると、種類に最少個数のリストが表示されるようにしてください。


完成例

選択された分類により、種類のリストが変化します。
かつ、種類のリスト個数最小限になっています。



解法手順

種類の候補リスト範囲を作成します。
下図では、赤枠内が「魚介類」が選択されてた場合の候補リスト範囲



問題と区別するために、分類2種類2 の名前を定義しています。
入力規則を直接フォームに入力するのは大変なので、作業を分割します。


候補リストを作成するには、
 A.選択された分類名に相当する項目の先頭位置(上図例では6番目)
 B.項目の個数(上図例では4個)
の2つを知る必要があります。

A.項目の先頭位置
SEARCH関数で種類リストの1列目を検索します。
戻り値が先頭位置
=MATCH($B$49,OFFSET(種類2,,,,1),0)
OFFSET(種類,,,,1) は、種類リストの1列目のリストを取得
4番目のパラメータを1にすることで、列数を1とする新たなリスト範囲が作成されます。
その新リストから分類名を検索しています。

B.項目の個数
項目の個数は、種類リストでの(選択された)分類の個数となりますので、COUNIIF関数を使って
=COUNTIF(OFFSET(種類2,,,,1),$B$49)
と記述できます。

以上により、必要な種類のリスト範囲は、
=OFFSET(種類2,項目の先頭位置-1,1,項目の個数,1)
で定義できます。(-1しているとに注意)

式をまとめると、
=OFFSET(種類2,MATCH($B$49,OFFSET(種類2,,,,1),0)-1,1,COUNTIF(OFFSET(種類2,,,,1),$B$49),1)
となります。(少々長い・・・)



7.重複チェック − 同一文字列不可



「入力文字列が既存入力と重複する」ということは、既存文字列中に入力した文字列が2個以上見つかるということ。
(そのうち1個は、入力した文字列そのもの)

問題


同じ項目を入力できないような「条件付き書式」を設定してください。

完成例

解答例

検索して見つかった個数が1個以下であれば、入力文字列以外見つからなかったのでOKとする。
(厳密には、<=で無く、=で可。0個はあり得ない)

検索には、COUNTIF(検索対象範囲,検索文字列)関数を使用。






×
PageTop