FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

↑やる気アップにご協力をお願いします。わぁいヽ(∇⌒ヽ)(ノ⌒∇)ノわぁい♪

こんな記事もありますよ


入力された内容をチェックしたい(2) (空白とNull編)

今回は前回の入力された内容をチェックしたい(1) (Null編)の続編でいきたいと思いますが…

今回のお悩みは逆の発想から…こちら!!

値が入力されているかどうかを知りたい

…という観点からがんばってみたいと思います。( ̄^ ̄) エッヘン!

え?なに威張ってるのかって…?

なんとなくです…な・ん・と・な・く  ( ̄^ ̄) エッヘン!



…威張る理由は、全くもって どこにも 全然ないのですが…

とにかく!!今回は、前回のNull編 に付属するような内容です。

前回は、コントロールに入力された値がNullかどうかの判断だけでした。

そこで今回は、何か入力されているかどうかの判断…ということで
「入力された内容のチェック」を行ってみたいと思います。

(…これで、タイトルと中身が合っているように見えますね…ε-(´▽`) ホッ)

今回も、前回同様にコードではフォーム名は全て Me. で記述します。
また、利用するコントロールもテキストボックスとして、名前もTxt_Aとします。

Txt_Aに何も入力されていない場合…単純に考えると…
Txt_Aの値はNullだろう…と考えられます。

でも、実際にはそうではないこともあるわけです…。

たとえば空白値が入っている場合…
この場合は Txt_Aには

文字数0の文字列("")が入っているとAccess側は判断します。(これ以降、文字数0の文字列は""で記述します)

つまり…
Txt_A には ""の文字列が入っている…」となってるわけですね…。

もしくは、Txt_Aにスペースを1つ入れていたとすると…
Txt_Aにはスペース1つの文字列が入っているとなり、

Access側には、
Txt_Aには " "の文字列が入っている…」と理解されちゃうわけです。

…でもね…正直人間の目で普通に判断した場合…

Txt_Aの値がNullだろうが、"" だろうが、" " だろうと…
結局は空っぽなんじゃ~~ チャブダイクラッシュ (ノ#-◇-)ノ ~~┻━┻

…じゃ~全部ひっくるめて…その…なんだ…
Nullとか""とか" "じゃなくて何か文字(数字も含む)が入っているかどうかを
調べれれば おっけ~なわけですよ。

では単純に1つずつ考えてみます。

まずはNullかどうかの判断…これは、
If Isnull(Me.Txt_A) Then
という書き方で、もしTxt_AがNullだった場合…という書き方になります。

では次に、空白("")だった場合ですが…これは単純に…
If Me.Txt_A = "" Then
…という書き方で大丈夫そうです。

じゃ~最後の1つ、スペースが1つ入ってた(" ")場合も問題ないですね…
If Me.Txt_A = " " Then

<2010.4.27追記
コメントにて、「入力された文字列の最後に半角空白がある場合は確定時に自動的に削除されます。」
と、hatenaさんよりご教授いただきました。いつもありがとうございます。m(_ _)m
ただし、全角の空白は削除されないようです。微妙だ…orz

半角空白に関する詳細はコメント欄に記述されてますので、良かったらご覧ください。
また、この件に関してはhatenaさんのブログで紹介されるようです。
そちらも合わせてご覧いただけると理解がより、深まると思われます。>


…これでOKでしょ~~

どうですか…これで3つ全て揃いました!!
後はこの3つを合体させれば完成です (-_-☆キラーン

複数条件があるときはAndやOrを使って条件を列挙していけば大丈夫です。

今回はいずれかの条件が適応された場合に、Txt_Aには何も入っていないと
判断させるので、Or で合体させていきましょう!
(ここでAndを利用すると、全ての条件に適合した場合に…となってしまうので
間違わないように注意してください)

では、今回の3つを合体させた形はこちら!
If Isnull(Me.Txt_A) Or Me.Txt_A = "" Or Me.Txt_A =" " Then
…う~ん…なんか、長ったらしいですね…( ̄ ̄ ̄ω ̄ ̄ ̄ ;;)

ま~3つも条件があるのだから…このままで…と思わないでもないですが、
実はもう少し短くできるのと、今回の条件には落とし穴があります…

その、今回の条件の落とし穴ですが…

スペースが入っていた場合…とありますが、この場合1つとは限らないんですよね…
たとえ10個はいってたとしても、見た目には空白…

つまり…"          "(全角スペース10個)という文字列の場合は
空白ではないと判断されてしまうわけです…

じゃ~条件で作ってしまえば…って、そんな事いってたら条件文が大変なことに
なってしまうのは、目に見えてます。

では…どうするのか…世の中には便利な関数がありました…
Trim関数です。

Trim関数は、引数で指定した文字列の中のスペースを取り除いてくれる関数なわけです。
つまり、Txt_Aに入っているのがスペースだけかもしれない場合には
Trim(Txt_A)
と記述すれば、スペースが1個であれ100個であれ、スペースを削除して
返す値は "" にしてくれます。
また、逆にスペースが入っていない場合はそのままの値を返すので
文字数0の文字列が引数に入ってもきても返す値は "" になってくれます。

ということは、先ほどの条件の書き方が変わってきて…
If Isnull(Me.Txt_A) Or Trim(Me.txt_A) ="" Then
と、記述できるわけです。

さらにNz関数を利用すると…
If Trim(Nz(Me.Txt_A, "")) = "" Then
と…できてしまいます。( ̄^ ̄) エッヘン!

Nz関数は引数に指定した値がNull値だった場合に、指定した別の値を
代入させることができる便利な代物です。

今回のケースで考えた場合、Txt_Aの値がNull値のときには
"" を代入させてしまうという考えかたになるわけです。…

もう少し砕いて説明すると…

Txt_AがNull値だった場合は、Nz関数で返される値が""となり、
Trim関数後の値もそのまま""

Txt_Aが""だった場合は、Nz関数ではそのまま""が返されて
Trim関数後の値もそのまま""

Txt_Aにスペースのみの文字列の場合は、
Nz関数ではそのままスペースの入った文字列が返されますが、
Trim関数でスペースが取り除かれて""になります。

つまり、上記3つのどの場合でも最終的な値は""となるので、その場合は
全て、人間で考える空白の場合は…と考えることができるわけです。

実際、Trim関数までは不必要かもしれず…
If Nz(Me.Txt_A,"") = "" 
だけでもいいですが、ちょっと覚えておいてもよさげでしょ?

以上で今回のお悩みを終了したいと思います…

じゃ!(・・)/ シュタ C= C= C= C= C= C= ┌(;・_・)┘トコトコ


<補足という名の蛇足>
Nz関数ですが、今回はあえて第2引数に""を入力しましたが、
第2引数の""を省略しても大丈夫です。

第2引数を省略した場合ですが、
代入する対象となるものが文字列の場合は""、数値の場合は0が
既定値となっています。
↑やる気アップにご協力をお願いします。わぁいヽ(∇⌒ヽ)(ノ⌒∇)ノわぁい♪

こんな記事もありますよ


コメントの投稿

非公開コメント

またまた、ツッコミ、失礼。

相変わらずの精力的なブログ更新、お疲れ様です。

で、またまた、ツッコミ虫がうずき出したので、ちょっとお邪魔します。

Txt_A が非連結だった場合、
Accessのテキストボックスの仕様として、入力された文字列の最後に半角空白がある場合は確定時に自動的に削除されます。複数の半角空白がある場合も削除されます。RTrim と同じ働きですね。
で、半角空白のみ入力した場合は、確定時に削除されて、Nullになります。
ということで、通常は、半角空白のみという状態はあり得ないので、
If Isnull(Me.Txt_A) Then
という条件で十分です。

「通常は」と断ったのは、例外があるわけで、ユーザーが入力した場合は問題ないのですが、VBAで代入した場合、例えば、Me.Txt_A = " " などとした場合は、半角空白のみでも削除されずに確定されます。

ということで、VBAで半角空白を代入するような処理がある場合は、ここで紹介されている半角空白や"" も考慮した式にする必要があります。


では、連結テキストボックスの場合は、というと、連結されているフィールドのプロパティの設定でまた変わってきます。
おっと、これも説明し出すと長くなりそうなので、この辺で。
というか、私のブログのネタに使えそうですので、出し惜しみです。

Re: またまた、ツッコミ、失礼。

> 相変わらずの精力的なブログ更新、お疲れ様です。

ここ最近、いま流行りの就活にかまけて、なかなか時間がとれないのが
つらいです。(T_T)ホロホロ

> で、またまた、ツッコミ虫がうずき出したので、ちょっとお邪魔します。

この突っ込みをいただけるので、ブログ更新が病みつきになってるんですよ。
暫らくは、やめれそうにありません。(^^ゞ

今まで自分の頭の中だけのものを外に出して、そのことに対して
ご指摘・ご指導をいただける…これが、最近の楽しみなんですo(〃^▽^〃)o

さすがにAccessClubさんでは、このような機会が少ないですから…

いや…むしろ…そんな回答者ってどうよ?って感じですが…orz

いつもの同じ台詞になってしまいますが…
これかも、ご指摘・ご指導 よろしくお願いします。m(_ _)m

Author's Profile ~自己紹介~

Genzo

Author:Genzo
PCは一応自作できるレベル。
ワード・エクセルなら基本的に
扱えるレベル。
プログラム・・・?ん?
VBA・・・?ん?ん??
それって美味しいですか?


~ 当ブログについて ~

~ Mail2Genzo  ~

Calender&Search かれんだーと検索

09 | 2018/10 | 11
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 - - -

Access2Genzo内で検索

Category ~かてごりー~

Comments Tree ~こめんとつりー~


Link ~りんく~

ブロとも申請フォーム

Counter ~かうんた~

Since 2010/08/01:

Online:

タグクラウド

最新トラックバック

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。