質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.99%

テキストボックスに値がある時とない時で分岐させたい

解決済

回答 2

投稿

  • 評価 0
  • クリップ 0
  • VIEW 4,538

シート1には「textbox 514」のテキストボックスがあります。

ここに何か値が入っている時・・・
シート2のA6セルにそれを表示させたいです。

もし、何も入っていない場合
シート2のA6セルに「未記入」と表示させたいです。

それで下記を作りました・・・

 Dim textbox_value As String
  textbox_value = Sheets("sheet1").TextBoxes("textbox 514").Characters.Text

   If IsEmpty(textbox_value) = 0 Then

     Worksheets("sheet2").Range("A6").Value = "未記入"  '未記入の場合
   Else
      Worksheets("sheet2").Range("A6").Value = textbox_value '記入されている場合"
  End If

実際動かしてみると、値がある時、ない時どちらの時も、下記に行ってしまいます。
なぜでしょうか?

 Worksheets("sheet2").Range("A6").Value = "未記入"  '未記入の場合

「textbox 514」のテキストボックスに値を入れた時、
「textbox_value」という変数にはしっかりその値が代入されているのは確認できました。
逆に何も入れていない時にも、変数には何も入っていない事も確認できました。

もし分かりましたらお力お貸し頂けますと幸いです。

  • クリップを取り消します

  • 質問の評価を上げたことを取り消します

  • 質問の評価を下げたことを取り消します

回答 2

checkベストアンサー

0

 If IsEmpty(textbox_value) = 0 Then


この部分を

 If textbox_value = "" Then


に変更してください。
string型の未記入判定は「textbox_value=””」になります。
詳しくは以下のサイトを見てみてください。

VBAのEmptyやNothingやNull等の違い

「空白文字のみが記入されてる場合も未記入扱いにしたい!」という場合は
以下の追記も確認してみてください!

※ttyp03さんの指摘を追記
「If textbox_value = "" Then」の判定だと本当に未記入の場合のみtrueになる
→テキストボックスに空白文字のみ記入された場合は見た目は未記入なのにfalseになる!
「Trim(string型の変数)」を使うと変数前後の空白が取れる
→空白文字のみ記入された場合もtrueになる!
ということです。※以下サイトに詳細書いてます
Trim関数について
Trimだとタブ等の文字が消えないので上記サイトの
「3 改行、タブ、全角スペースを削除する方法」項目のように
Replace関数で消していくやり方も確認してみてください。
▼ 空白文字のみの場合は未記入とする判定方法に変更

' 記入内容を変更しないように、必ず別の変数に取得する
Dim hantei As String
hantei = Trim(textbox_value)    ' 空白削除
hantei = Replace(hantei, vbTab, "")    ' タブ削除
hantei = Replace(hantei, vbCrLf, "")    ' 改行削除
hantei = Replace(hantei, vbLf, "")    ' 改行削除
If hantei  = "" Then

投稿

編集

Youbun

score 121

  • ttyp03

    ttyp03

    2019/10/07 17:19

    Trimもしたほうがよいかもですね。
    仕様次第ですが。
    空白も未記入とみなすならTrim必要、記入ありとするならこのままで。

0

IsNumeric(x)がTrueならばxは数値(にできる)
IsNumeric(x)がFalseならばxは数値でない

IsEmpty(x)がTrueならばxは空(0 or "")
IsEmpty(x)がFalse(=0)ならばxは空ではない

  If IsEmpty(textbox_value) = 0 Then

これでは IsEmpty(textbox_value) がFalse(空ではない)ならば

  Worksheets("sheet2").Range("A6").Value = "未記入"  '未記入の場合


となります。やろうとしていることと関数の機能が逆転しています。
空のときに入りたいのであれば本来はこっちになります。

  If IsEmpty(textbox_value) Then
    Worksheets("sheet2").Range("A6").Value = "未記入"  '未記入の場合

投稿

sousuke

score 3314

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.99%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る