• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBA 空白テキストボックスカウント)

VBA 空白テキストボックスカウント

このQ&Aのポイント
  • VBAを使用して、ユーザーフォーム上のテキストボックスのうち、空白のテキストボックスの数をカウントする方法について教えてください。
  • また、テキストボックス内の数字の合計を計算する際に、よりスマートなコードの書き方があれば教えてください。
  • さらに、SEOを意識したタイトルや要約文、ハッシュタグを生成してください。

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.4

>上記 msgbox "BLANK COUNT " & res1 を 31-res1に変えました。 あなたが書いた「具体的なマクロ」を、手抜きせずあなたのエクセルからコピーしてそのまま情報提供してください。 >テキストボックスに "0"が表示されます。 たとえば テキストボックス = format(res1, "#") とかでいいです。

hanwa113
質問者

お礼

お返事ありがとうございます。 以下のコードでうまく動きました。 Dim i As Double Dim res1 As Double Dim res2 As Double For i = 1 To 31 If Me.Controls("s" & i) = "" Then res1 = res1 + 1 res2 = res2 + Val(Me.Controls("s" & i)) Next i s_su.Caption = 31 - res1 s_su.Caption = Format(31 - res1, "#") s_kei.Caption = res2 s_kei.Caption = Format(res2, "#") 入力されているTextBoxを数えることができました。 TextBox1-31を s1-s31に変更 数を表示する所をLabelに変更 s_su 金額を表示するところをLabelに変更 s_kei TextBoxが未入力状態では s_suとs_keiに "0"が表示されなく なりました。 大変勉強になりました。ありがとうございました。  

その他の回答 (3)

回答No.3

#2の回答者です。 解決したなら何も言うことはありませんが、 >テキストボックスに "0"が表示されます。 >これを表示されないようにするにはどうしたらいいでしょうか。 直接、そのTextBox に値を戻すという条件で、Val を通せば、空白は、当然、0 になりますね。 ただ、合計値を取るなら、何も問題はないはずです。 聞かれていないので、余計なお世話かもしれませんし、質問はよく理解していませんが、 空白かどうかはを検査するなら、私なら、以下のように書くかもしれませんね。 空白とは何を意味するかにも違ってきます。空白とは、文字列の場合は、基本的には、 長さ0の文字列ということになります。ただ、そうとも取れない時があります。 For i = 1 To 10 If Len(Trim(Me.Controls("TextBox" & i))) = 0 Then  cnt = cnt + 1 End If

回答No.2

こんにちは。 既に回答がついているようですが、私は、質問がよく理解できないのですが…… >このなかの数字が入っているテキストボックスの数をカウントしたい >純粋に空白のテキストボックスを数えること >テキストボックスを1-31数字の合計を別のテキストボックスに表示 これを、同時に行えとは書いていないし、また、それを同時に行うというロジックの妥当性もありません。 あえてするなら、そう書かないと分かりません。 >If Controls("TextBox" & i).Value = "" Then >s_su.Text = >上の式の =の右側に何を書いたらいいかがわかりません。 これをみたら、空白のテキストボックスを数えるようにも思えます。 >val(TextBox1.Text) + val(TextBox2.Text) これですと、テキストボックスの数字の合計のようにも思えます。 一体、どれが本当なのですか?

hanwa113
質問者

お礼

わかりにくい質問で申し訳ありません。 TextBoxが31個ありまして、1-31を計算、別のテキストボックスに表示 同じ1-31の空白テキストをカウント 別のテキストボックスに表示を 行いたかったのです。 上記の作業は別々で行うつもりでした。 うまくいきました。ありがとうございました。

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

>もっとスマートに書けるようなコード 既にあなたのマクロで実現している通りにします sub macro1()  dim i as integer  dim res1 as integer  dim res2 as double  for i = 1 to 31   if me.controls("TextBox" & i) = "" then res1 = res1 + 1   res2 = res2 + val(me.controls("TextBox" & i))  next i  msgbox "BLANK COUNT " & res1  msgbox "SUM " & res2 end sub

hanwa113
質問者

お礼

ありがとうございました。まさにこの通りです。 MsgboxをTextBoxにかえてうまくいきました。 最終的に入力されているテキストボックスをカウントすることに しました。上記 msgbox "BLANK COUNT " & res1 を 31-res1に 変えました。 もう1つ質問させてください。 すべてのテキストボックスが空の場合、計算ボタンを押すと テキストボックスに "0"が表示されます。 これを表示されないようにするにはどうしたらいいでしょうか。

関連するQ&A

専門家に質問してみよう