入れ子関数の組み込み
入力規則や条件付き書式の中で
入れ子にした
関数を使う場合を考えます。
慣れてくると、直接、関数を含む数式を入力するようになりますが、最初のうちは、なかなか難しいものです。
パラメータの記述に不備がある!などと、エクセルに文句を言われるうちは良いのですが、
意図した通りに動作してくれない場合に、さて、どの関数の記述に誤りがあるのか迷ってしまいます。
ここでは、氏名の入力において、
・スペースの入力を許可しない (半角、全角のどちらも不可)
という、
入力規則を設定してみます。
条件付き書式の場合も考え方は同じです。
仕様
下図のように、
スペースを含む文字列を入力すると
警告メッセージを表示します。
この設定は、簡単なようで、なかなか面倒です。
必要な部分機能としては、
A.半角、全角のどちらにも対応。
方法としては、
・半角スペースを全角スペースに
SUBSTITUTE関数で置換
・半角文字を全角文字に
JIS関数で置換
が考えられますが、ここでは、汎用的になるように、
JIS関数を用いて入力文字を
全角文字に置換することで対応
B.入力値からスペースを検索
C.検索結果の判定
が考えられ、実際に組み込むと、下図のように、関数3個の
複雑な入れ子になります。
慣れて来れば、直接、ささっと手入力できるようになるのですが・・・・
入力方法 - 分割入力
条件付き書式のフィールドに直接入力していっても良いのですが、
・入力支援が無い−関数パラメータの表示など
・矢印キーが効かない−矢印キーを押すとキーコードに変換されてしまう − 大昔からのバグ?
・段階的なデバッグが難しい
などの理由から、
セルに数式を設定し、順番に
デバッグして動作を確かめ、
完成版をに
条件付き書式に統合
する順序で考えていきます。
1.全角変換 - 半角文字を全角文字に変換
半角文字を全角文字に変換。
半角スペースを全角スペースに変換しておくことで、後の
判定が1回で済みます−式が短くなる。
まず、セル
C15に下記の式を入力
=JIS(C13)
セル
C15に半角文字を入力して全角に置換されて表示されたらOK.
ここでは全角と半角の見分けが容易な
カタカナを入力に使用しています。
(入力後にファンクションキー
F8を押すと半角文字に変換)
2.スペース入力検査
変換した文字列の中に
スペースが含まれるかを調べます。
セル
C16に下記の式を入力−
SEARCH関数を使用
=SEARCH(" ",C13)
SEARCH 関数
指定された文字列を他の文字列の中で検索し、その文字列が最初に現れる位置を左端から数え、その番号を返します。
書式 SEARCH(検索文字列,対象,[開始位置])
検索文字列 必ず指定します。検索する文字列を指定
対象 必ず指定します。検索文字列引数に指定した値を含む文字列を指定
開始位置 省略可能です。検索を開始する位置を指定
半角スペースを含む文字を入力して下図のように
数字が表示されたらOK。
この数字は、
見つかった文字の位置(先頭は1)を示しています。(4文字目に発見!)
ただし、探す文字が
見つからない場合はエラー(
#VALUE)が返却
3.スペース有無判定
よて、エラーが返らなかった場合に”
スペース入力されている”と判定するために、
ISERROR関数を使用します。
スペースが入力されていない場合に入力OK 、すなわち、入力文字内にスペースが見つからない
すなわち、
SEARCH関数がエラーになる場合に入力OK となりますので、
セル
C17の式は以下ののようになります。
4.入力テスト
名前のフィールドに、半角または全角のスペースが入った文字列を入力してみます。
C17に
FALSEが表示されたらOK
スペースが含まれない場合に
TRUEが表示されたらOK。
5.関数結合 - 1つのセル内の式にまとめる
関数を順に結合して行きます。
まず、C15の=より右側の部分、
JIS(C13) をコピーして、C16の式中の「
C15」と入れ替えます。
↓
同様に、
C16にできた数式の=より右側部分をコピーして、
C17の式の「
C16」と入れ替えます。
テストしてみて、スペース有無により
TRUE/FALSE が正しく表示されればOK
6.完成 - 入力規則への組み込み
数式を入力規則に組み込みます。
C17の式、
=ISERROR(SEARCH(" ",JIS(C13))) をコピーして、
C13に設定する入力規則の数式フィールドに貼り付けます。
入力規則の種類は、「
ユーザー設定」
エラーメッセージは、適当に設定します。下記例
以上で、組み込み完了。
テストしてみて、正しくエラーが表示されたら(または、されない)OK。