マクロでいこう! ~ Excel活用HomePage ~

VBAでラクしたい ~Part 2~

こちらのコーナーでは、VBAの使い方を中心にご紹介していきます。
作者自身の経験から書いておりますので、本とかとは違ったコトを
書いてるトコロもあるかもしれません。 そういう場合は、良さそうな方を信じましょう(^_^;
TOPVBAでラクしたい ~Part 2~ > 空白入力への対応(その2)

空白入力への対応(その2)

なるほど通し番号を付加するようにすれば、空白レコードが入っても大丈夫なのか、というところ
が前回のポイントでした。

ですが「ぬわにぃぃぃ?空白レコードなんぞ登録は認めんっ」という方も中にはいらっしゃるはず。


というわけで今回は「空白入力を許可しない」という視点で攻めてみたいと思います。


例えば皆さんでしたら、この目的を達成するためにどのような手法を取られるでしょうか。

実はこれも、方法は一つでは無いです。例えば、


(1)警告メッセージを表示し、入力を促す

一番スタンダードな手法ですね。
ユーザーとしても、何が間違っているのかがすぐに把握でき、対応がしやすいというメリットがあ
ります(^^)


(2)特定のコントロールを使用不可にし、操作自体を制限してしまう

いわゆる無言の抗議ってやつですね(^^;) #なのか?
例えば今回の場合でいくと、テキストボックスに何か文字が入るまで「登録」を押せなくしてしま
うとかいうことです。
まぁこれは使い方をわかっている人にとっては、なんで「登録」が使用不可なのかが一目瞭然です
けれども、よくわからずに使っている人にとっては「故障かしら?」などと思ってしまったりもす
るかもしれません。
#よくわからない人に使わせるな、というツッコミはなしね(^_^;)


ということを踏まえまして、まずは(1)の方法から見ていくことにいたしましょう。


ユーザーが空白を入れちゃいそうな場合に警告を表示するってやり方も、この場合ですと2通り考
えられますよね。

1つは"テキストボックスに空白入力された瞬間"、もう1つは「登録」が押された時ですね。

最初の方法は、各テキストボックスの入力状況をチェックし、リアルタイムで入力修正を促すやり
方です。間違っていたらその場で直してしまいたい、という性格の方向けです。

後の方法は、「登録」が押されたタイミングで、チェック対象となる全てのテキストボックスを調
べて、そこでエラーとなるものだけ順番に警告表示しよう、というやり方です。
"順番に"と敢えて申し上げているのは、例えば10個所入力するところがあって、そのうち9個所
が間違っていたとします。その時に「登録」を押された瞬間、9回も連続して警告メッセージが表
示されても困りますよね(^_^;) 
#どれがエラーだったかなんて覚えきれませんし、何よりうっとぉしい。

ですのでエラーが複数個所あったとしても、「登録」を押された時に出てくる警告は1回。
その個所を直して再び「登録」が押されたら、また次のエラー個所について警告表示・・・という
ような感じです。お分かりいただけましたでしょうか?(^-^;


これら2つの方法はセットで使われるケースが多いです。要は入力時のエラーチェックを厳重にし
ておけば、おかしなデータが入りこむことによって集計がヘンになったり・・・とかいうことを防
げるわけですからヽ(^-^ )


で、まずは「登録」ボタンでの空白チェックから。

「氏名」テキストボックスが空白だった場合を考えてみましょうか。

テキストボックスに入っている文字列を取得するには Text プロパティの値を見ればいいというの
は前にもやりましたよね d(^-^ )

"Textプロパティの値が空白だったら"という条件になりますから

If TxtName.Text = "" Then ・・・

という書き方でよさそうですよね。

・・・でもですね、これだとまだ出来としては半分なんですよ。


なんでかって言うと、まず試しにこれ↓を CmdAddNew_Click の中、"自動採番処理"の前に追加して
みて下さい。

    If TxtName.Text = "" Then
        MsgBox ("こら")
    End If

でもって「氏名」のテキストボックスのとこでスペースキーを1回押してから、「登録」をクリッ
クしてみましょう。
・・・どうですか? 怒られないですよね。
スペースキーを押すってことは"空白の文字列を入れる"ってことになるんです。"空白の文字列"と
か言うとややこしい気もしますが、スペース(空白)も文字数としてはカウントされるんだというこ
とは覚えておいて下さい。【重要】

じゃあそういう場合はどうするのかということですよね。


大丈夫。そういうときは「Trim関数」を使いましょう。

Trim関数とは、"指定された文字列の両側にある、余分な空白文字列を取り除いてくれる関数"なの
です。

例えば

Dim Test As String
Test = "  aa   "

とかいう値を持つ変数があったとします。aaの両側には空白が入っていますよね。

こんな時に

Dim Test As String
Dim Test2 As String
Test = "  aa   "
Test2 = Trim(Test)

としてやると、変数Test2には変数Testから空白を取り除いた aa が格納されますヽ(^-^ )

ちなみに RTrim と書くと、指定文字列の右側に存在する空白のみ、LTrimと書くと左側に存在する
空白のみ取り除きます。RとLは RightとLeftって意味です。


というわけで、この関数を使って

    If Trim(TxtName.Text) = "" Then
        MsgBox ("こら")
    End If

としてやれば、「氏名」テキストボックスにスペース(空白)のみ入力された場合でも、それを
取り除いてくれますから、結果は "" とイコールになります。


それでは次回までごきげんよぉ~(^^)/~


TOPVBAでラクしたい ~Part 2~
Copyright (C) 2006 マクロでいこう!. All Rights Reserved.