🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

2回答

18845閲覧

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

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2019/10/07 07:46

シート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」という変数にはしっかりその値が代入されているのは確認できました。
逆に何も入れていない時にも、変数には何も入っていない事も確認できました。

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

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

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

VBA

1 If IsEmpty(textbox_value) = 0 Then

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

vba

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

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

VBA

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

投稿2019/10/07 09:36

sousuke

総合スコア3830

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

vb

1 If IsEmpty(textbox_value) = 0 Then

この部分を

vb

1 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関数で消していくやり方も確認してみてください。
▼ 空白文字のみの場合は未記入とする判定方法に変更

vb

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

投稿2019/10/07 07:56

編集2019/10/07 09:24
Youbun

総合スコア125

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ttyp03

2019/10/07 08:19

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問