Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


9317 / 13644 ツリー ←次へ | 前へ→

【28049】UserForm1のTextBox1に未入力チェックしたいのですが nobuyuki 05/8/27(土) 13:45 質問[未読]
【28050】Re:UserForm1のTextBox1に未入力チェックし... かみちゃん 05/8/27(土) 14:02 回答[未読]
【28052】Re:UserForm1のTextBox1に未入力チェックし... nobuyuki 05/8/27(土) 14:23 お礼[未読]
【28074】Re:UserForm1のTextBox1に未入力チェックし... ichinose 05/8/27(土) 23:03 発言[未読]
【28076】Re:UserForm1のTextBox1に未入力チェックし... nobuyuki 05/8/28(日) 0:11 お礼[未読]

【28049】UserForm1のTextBox1に未入力チェックし...
質問  nobuyuki  - 05/8/27(土) 13:45 -

引用なし
パスワード
   いつもVBA質問箱にお世話になっています。
以下の件、お解かりの方ご教示の程よろしくお願いします。

UserForm1に次のコードを記述。

Private Sub CommandButton1_Click()
  判定 = IsEmpty(TextBox1.Text)
  MsgBox 判定
End Sub

このUserForm1を実行し、オペレータがTextBox1に何も入力せず
CommandButton1を左クリックしたら”判定”はFalseとなり、
今度はTextBox1に"ABC"(任意の文字列)を入力し同様に操作しても
”判定”はFalseになってしまいます。

未入力を検出し必須入力とオペレータに促したいのですが、
どのようにすれば検出できるでしょうか。
よろしくお願いいたします。

【28050】Re:UserForm1のTextBox1に未入力チェック...
回答  かみちゃん  - 05/8/27(土) 14:02 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>未入力を検出し必須入力とオペレータに促したいのですが、
>どのようにすれば検出できるでしょうか。

以下のような感じでいかがですか?

Private Sub CommandButton1_Click()
 If TextBox1.Text <> "" Then
  判定 = True
 Else
  判定 = False
 End If
 MsgBox 判定
End Sub

【28052】Re:UserForm1のTextBox1に未入力チェック...
お礼  nobuyuki  - 05/8/27(土) 14:23 -

引用なし
パスワード
   ▼かみちゃん さん:
いつもお名前拝見しております。即答ありがとうございます。
ご教示いただいたコードで目的が達せられました。
ありがとうございました。こんなに簡単に実現できるとは....赤面です。

なお、大変ずうずうしく追加質問したいのですが、お答えいただけませんでしょうか?

以前にワークシート上の例えば A1セルにIsEmpty関数を
使って実現できたので、全く同様にUserForm1でも可能と考え試しました。
そもそもUserForm1ではIsEmpty関数は使用不可なのでしょうか?

>こんにちは。かみちゃん です。
>
>>未入力を検出し必須入力とオペレータに促したいのですが、
>>どのようにすれば検出できるでしょうか。
>
>以下のような感じでいかがですか?
>
>Private Sub CommandButton1_Click()
> If TextBox1.Text <> "" Then
>  判定 = True
> Else
>  判定 = False
> End If
> MsgBox 判定
>End Sub

【28074】Re:UserForm1のTextBox1に未入力チェック...
発言  ichinose  - 05/8/27(土) 23:03 -

引用なし
パスワード
   nobuyuki さん
かみちゃん さん
こんばんは。

>なお、大変ずうずうしく追加質問したいのですが、お答えいただけませんでしょうか?
>
>以前にワークシート上の例えば A1セルにIsEmpty関数を
>使って実現できたので、全く同様にUserForm1でも可能と考え試しました。
>そもそもUserForm1ではIsEmpty関数は使用不可なのでしょうか?

Emptyとは、Variant型の変数でまだどの型にも属していない状態です。
例えば、以下のコードを実行してみて下さい。
'================================================
Sub test()
  Dim string_data As String
  Dim long_data As Long
  Dim variant_data As Variant
  MsgBox "string_data: " & string_data & "---" & IsEmpty(string_data)
  MsgBox "long_data: " & long_data & "---" & IsEmpty(long_data)
  MsgBox "variant_data: " & variant_data & "---" & IsEmpty(variant_data)
  'IsemptyがTrueを返すのは↑のみです。
  string_data = ""
  long_data = 0
  variant_data = ""
  MsgBox "string_data: " & string_data & "---" & IsEmpty(string_data)
  MsgBox "long_data: " & long_data & "---" & IsEmpty(long_data)
  MsgBox "variant_data: " & variant_data & "---" & IsEmpty(variant_data)
   string_data = "aa"
  long_data = 12
  variant_data = "aa"
  MsgBox "string_data: " & string_data & "---" & IsEmpty(string_data)
  MsgBox "long_data: " & long_data & "---" & IsEmpty(long_data)
  MsgBox "variant_data: " & variant_data & "---" & IsEmpty(variant_data)
end sub

これを踏まえ、
UserformのTextboxのTextプロパティを考えると
これそもそもString型ですのでIsEmptyでTrueは返りません。

又、仮にTextプロパティがVariant型だとしても
Textbox内での内部コードで

Text=""

というコードが実行されていれば

もはやEmptyではありません
(理由は、上記のコードの実行でお分かりだと思います)。

よって、この場合は、かみちゃん さん
記述されているように

If TextBox1.Text <> "" Then

という判断が間違いのない方法だと思います。

【28076】Re:UserForm1のTextBox1に未入力チェック...
お礼  nobuyuki  - 05/8/28(日) 0:11 -

引用なし
パスワード
   ▼ichinose さん:
ichinose さん、こんばんは。ご回答ありがとうございます。
早速、頂戴したサンプルコードを実行しました。
理解することが出来ました。とても解り易くしてくださり、ありがとうございました。
textプロパティでそもそもstring型というのが、いままで全く解っていなく
とても勉強になりました。活用させて頂きます。感謝いたします。

▼かみちゃん さん:
ご無礼な質問にお付き合いくださりありがとうございました。
お礼申し上げます。

>nobuyuki さん
>かみちゃん さん
>こんばんは。
>
>>なお、大変ずうずうしく追加質問したいのですが、お答えいただけませんでしょうか?
>>
>>以前にワークシート上の例えば A1セルにIsEmpty関数を
>>使って実現できたので、全く同様にUserForm1でも可能と考え試しました。
>>そもそもUserForm1ではIsEmpty関数は使用不可なのでしょうか?
>
>Emptyとは、Variant型の変数でまだどの型にも属していない状態です。
>例えば、以下のコードを実行してみて下さい。
>'================================================
>Sub test()
>  Dim string_data As String
>  Dim long_data As Long
>  Dim variant_data As Variant
>  MsgBox "string_data: " & string_data & "---" & IsEmpty(string_data)
>  MsgBox "long_data: " & long_data & "---" & IsEmpty(long_data)
>  MsgBox "variant_data: " & variant_data & "---" & IsEmpty(variant_data)
>  'IsemptyがTrueを返すのは↑のみです。
>  string_data = ""
>  long_data = 0
>  variant_data = ""
>  MsgBox "string_data: " & string_data & "---" & IsEmpty(string_data)
>  MsgBox "long_data: " & long_data & "---" & IsEmpty(long_data)
>  MsgBox "variant_data: " & variant_data & "---" & IsEmpty(variant_data)
>   string_data = "aa"
>  long_data = 12
>  variant_data = "aa"
>  MsgBox "string_data: " & string_data & "---" & IsEmpty(string_data)
>  MsgBox "long_data: " & long_data & "---" & IsEmpty(long_data)
>  MsgBox "variant_data: " & variant_data & "---" & IsEmpty(variant_data)
>end sub
>
>これを踏まえ、
>UserformのTextboxのTextプロパティを考えると
>これそもそもString型ですのでIsEmptyでTrueは返りません。
>
>又、仮にTextプロパティがVariant型だとしても
>Textbox内での内部コードで
>
>Text=""
>
>というコードが実行されていれば
>
>もはやEmptyではありません
>(理由は、上記のコードの実行でお分かりだと思います)。
>
>よって、この場合は、かみちゃん さん
>記述されているように
>
>If TextBox1.Text <> "" Then
>
>という判断が間違いのない方法だと思います。

9317 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free