アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは、よろしくお願いします。

ユーザーフォーム上にテキストボックスが 1-31が4段あります。
1-31には数字が入っているところもあれば、空白の所もあります。
このなかの数字が入っているテキストボックスの数をカウント
したいのですがうまくいきません。

自分なりにやってみたこと

テキストボックスの空白を数えて

Dim i As Integer
For i = 1 To 31
If Controls("TextBox" & i).Value = "" Then
s_su.Text =

Exit Sub

s_suはカウントされた数字を表示するテキストボックスです。
上の式の =の右側に何を書いたらいいかがわかりません。

純粋に空白のテキストボックスを数えることは可能でしょうか。

また上記のテキストボックスを1-31数字の合計を別のテキストボックスに
表示しようと思いますが、
val(TextBox1.Text) + val(TextBox2.Text)~これを31回書いてますが
もっとスマートに書けるようなコードはありますか。

A 回答 (4件)

>上記 msgbox "BLANK COUNT " & res1 を 31-res1に変えました。



あなたが書いた「具体的なマクロ」を、手抜きせずあなたのエクセルからコピーしてそのまま情報提供してください。


>テキストボックスに "0"が表示されます。

たとえば
テキストボックス = format(res1, "#")
とかでいいです。
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。

以下のコードでうまく動きました。

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"が表示されなく
なりました。

大変勉強になりました。ありがとうございました。

 

お礼日時:2014/06/09 15:57

#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
    • good
    • 0

こんにちは。



既に回答がついているようですが、私は、質問がよく理解できないのですが……

>このなかの数字が入っているテキストボックスの数をカウントしたい
>純粋に空白のテキストボックスを数えること
>テキストボックスを1-31数字の合計を別のテキストボックスに表示

これを、同時に行えとは書いていないし、また、それを同時に行うというロジックの妥当性もありません。
あえてするなら、そう書かないと分かりません。

>If Controls("TextBox" & i).Value = "" Then
>s_su.Text =

>上の式の =の右側に何を書いたらいいかがわかりません。

これをみたら、空白のテキストボックスを数えるようにも思えます。

>val(TextBox1.Text) + val(TextBox2.Text)
これですと、テキストボックスの数字の合計のようにも思えます。

一体、どれが本当なのですか?
    • good
    • 0
この回答へのお礼

わかりにくい質問で申し訳ありません。
TextBoxが31個ありまして、1-31を計算、別のテキストボックスに表示
同じ1-31の空白テキストをカウント 別のテキストボックスに表示を
行いたかったのです。

上記の作業は別々で行うつもりでした。
うまくいきました。ありがとうございました。

お礼日時:2014/06/07 14:37

>もっとスマートに書けるようなコード



既にあなたのマクロで実現している通りにします

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
    • good
    • 0
この回答へのお礼

ありがとうございました。まさにこの通りです。
MsgboxをTextBoxにかえてうまくいきました。
最終的に入力されているテキストボックスをカウントすることに
しました。上記 msgbox "BLANK COUNT " & res1 を 31-res1に
変えました。

もう1つ質問させてください。

すべてのテキストボックスが空の場合、計算ボタンを押すと
テキストボックスに "0"が表示されます。
これを表示されないようにするにはどうしたらいいでしょうか。

お礼日時:2014/06/07 14:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています