Excel VBA質問箱 IV

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

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


12309 / 13646 ツリー ←次へ | 前へ→

【11179】フォーム上への計算結果表示 あき 04/3/2(火) 11:49 質問
【11183】Re:フォーム上への計算結果表示 Jaka 04/3/2(火) 12:29 回答
【11186】Re:フォーム上への計算結果表示 かみちゃん 04/3/2(火) 12:51 回答
【11196】Re:フォーム上への計算結果表示 Jaka 04/3/2(火) 13:58 発言
【11212】また適当なこと言ってました。 Jaka 04/3/2(火) 17:27 発言
【11198】Re:フォーム上への計算結果表示 あき 04/3/2(火) 14:12 回答
【11197】Re:フォーム上への計算結果表示 あき 04/3/2(火) 14:05 質問
【11199】Re:フォーム上への計算結果表示 Jaka 04/3/2(火) 14:27 回答
【11201】Re:フォーム上への計算結果表示 かみちゃん 04/3/2(火) 14:34 回答
【11203】Re:フォーム上への計算結果表示 あき 04/3/2(火) 14:46 質問
【11206】Re:フォーム上への計算結果表示 Jaka 04/3/2(火) 15:07 回答
【11209】Re:フォーム上への計算結果表示 あき 04/3/2(火) 15:32 お礼
【11184】Re:フォーム上への計算結果表示 かみちゃん 04/3/2(火) 12:33 回答
【11189】Re:フォーム上への計算結果表示 Jカーター 04/3/2(火) 13:31 回答

【11179】フォーム上への計算結果表示
質問  あき  - 04/3/2(火) 11:49 -

引用なし
パスワード
   フォーム上で、テキストボックスへ入力したいくつかの数字を、
入力している最中のフォーム上へ合計して表示(ラベルで?)
したいのですが、どうすれば良いのでしょうか??

【11183】Re:フォーム上への計算結果表示
回答  Jaka  - 04/3/2(火) 12:29 -

引用なし
パスワード
   こんにちは。

Private Sub TextBox1_Change()
  Label1.Caption = Application.Sum(TextBox1.Value, Label1.Caption)
End Sub

Private Sub TextBox2_Change()
  Label1.Caption = Application.Sum(TextBox2.Value, Label1.Caption)
End Sub

Private Sub TextBox3_Change()
  Label1.Caption = Application.Sum(TextBox3.Value, Label1.Caption)
End Sub

【11184】Re:フォーム上への計算結果表示
回答  かみちゃん  - 04/3/2(火) 12:33 -

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

>フォーム上で、テキストボックスへ入力したいくつかの数字を、
>入力している最中のフォーム上へ合計して表示(ラベルで?)
>したいのですが、どうすれば良いのでしょうか??

それぞれのテキストボックスのExitイベントとして次のように記述すればいいと思います。
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
 Me.TextBox3 = Val(Me.TextBox1) + Val(Me.TextBox2)
End Sub
テキストボックスがたくさんある場合は、For〜Next等で、すべてのテキストボックスの値を加算していく方法もあります。

【11186】Re:フォーム上への計算結果表示
回答  かみちゃん  - 04/3/2(火) 12:51 -

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

>Private Sub TextBox1_Change()
>  Label1.Caption = Application.Sum(TextBox1.Value, Label1.Caption)
>End Sub

Changeイベントだと、キー入力の都度加算されませんか?
あと、Exitイベントでこの式を使うとLabel1が数字でない場合、「型が一致しません」のエラーになります。
また、数字だった場合でも、この方法だと、Label1にどんどん加算されていきますよね?
たとえば、
TextBox1に10を入力すると、Label1は10と表示
TextBox2に20を入力すると、Label1は30と表示
TextBox3に30を入力すると、Label1は60と表示
TextBox2を40に修正すると、Label1は100と表示
あきさんは、本当は、80を表示したいのではないでしょうか?

したがって、
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
 Me.Label1.Caption = Application.Sum(Val(Me.TextBox1.Value), Val(Me.TextBox2.Caption), ...)
End Sub
のほうがよろしいのではないでしょうか?

【11189】Re:フォーム上への計算結果表示
回答  Jカーター  - 04/3/2(火) 13:31 -

引用なし
パスワード
   おじゃまします。
単純な足し算なので
Changeイベントでいいような気がします。
(値もリアルタイムですし)

ただVal関数を使う
すべてのTextBoxの値を加算する
すべてのTextBoxのイベントに書くことは必要ですが。

一個のサブルーチンにしておいてCallするとか
さらにはクラスモジュールを使えばもう少し簡略化は可能と思います。

【11196】Re:フォーム上への計算結果表示
発言  Jaka  - 04/3/2(火) 13:58 -

引用なし
パスワード
   すみません。

>入力している最中
という事だったんで、IMEをOFFにして使ってもらう予定で、SUM関数を使ったんですがエラーになっちゃいますね。(セル対象だと数字以外は0として扱ってくれるのに)
厳密に書くと、キー入力のチェックも必要だったり、その他もろもろのチェックも必要だったんで、かなり手を抜いていました。

【11197】Re:フォーム上への計算結果表示
質問  あき  - 04/3/2(火) 14:05 -

引用なし
パスワード
   jakaさん、かみちゃんさん、Jカーターさんへ
返信ありがとうございます。
とは言ってもまだできてません。(本当に初心者ですので・・・)
とりあえず、フォーム上にテキストで入力した数値の合算値が表示できれば良いのですが、どちらを使用すればよいのですか?

また、下記のものは、フォームのコードへ記載してみたのですが・・・

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  Me.Label1.Caption = Application.Sum(Val(Me.TextBox1.Value),
 Val(Me.TextBox2.Caption), ...)
 End Sub

メソッドがだめとか出てきます!??
教えてください。
よろしくお願いいたします。

【11198】Re:フォーム上への計算結果表示
回答  あき  - 04/3/2(火) 14:12 -

引用なし
パスワード
   ▼かみちゃん さん:
>Jaka さん、こんにちは。かみちゃん です。
>
>>Private Sub TextBox1_Change()
>>  Label1.Caption = Application.Sum(TextBox1.Value, Label1.Caption)
>>End Sub
>
>Changeイベントだと、キー入力の都度加算されませんか?
>あと、Exitイベントでこの式を使うとLabel1が数字でない場合、「型が一致しません」のエラーになります。
>また、数字だった場合でも、この方法だと、Label1にどんどん加算されていきますよね?
>たとえば、
>TextBox1に10を入力すると、Label1は10と表示
>TextBox2に20を入力すると、Label1は30と表示
>TextBox3に30を入力すると、Label1は60と表示
>TextBox2を40に修正すると、Label1は100と表示
>あきさんは、本当は、80を表示したいのではないでしょうか?
>
>したがって、
>Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
> Me.Label1.Caption = Application.Sum(Val(Me.TextBox1.Value), Val(Me.TextBox2.Caption), ...)
>End Sub
>のほうがよろしいのではないでしょうか?

ちなみに、まさにかみちゃんさんの言うとおりです。
80と表示できれば、とても良いのですが・・・
よろしくお願い致します。

【11199】Re:フォーム上への計算結果表示
回答  Jaka  - 04/3/2(火) 14:27 -

引用なし
パスワード
   >Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
>  Me.Label1.Caption = Application.Sum(Val(Me.TextBox1.Value),
> Val(Me.TextBox2.Caption), ...)
            ↑ テキストボックスのCaption?
Value にして下さい。

【11201】Re:フォーム上への計算結果表示
回答  かみちゃん  - 04/3/2(火) 14:34 -

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

>>Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
>>  Me.Label1.Caption = Application.Sum(Val(Me.TextBox1.Value),
>> Val(Me.TextBox2.Caption), ...)
>            ↑ テキストボックスのCaption?
>Value にして下さい。

お恥ずかしいです。完全に誤植ですね。
Jakaさんフォローありがとうございます。
あと、最後の「, ...」は、適宜続けてくださいという意味ですので、一番最後は「, ...」ではありません。

【11203】Re:フォーム上への計算結果表示
質問  あき  - 04/3/2(火) 14:46 -

引用なし
パスワード
   ▼Jaka さん:
>>Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
>>  Me.Label1.Caption = Application.Sum(Val(Me.TextBox1.Value),
>> Val(Me.TextBox2.Caption), ...)
>            ↑ テキストボックスのCaption?
>Value にして下さい。
Jaka さんへ

Value にして表示はしてくれました。(ありがとうございます)
ただ、足し算をしてくれないです。テキスト1、テキスト2と数字を入力してあとに
再度テキスト1へ入力すると、合計値が表示されます。
入力しないと、テキスト1の数字のみの表示です。
何か、足らないんですか?
よろしくお願いいたします。

【11206】Re:フォーム上への計算結果表示
回答  Jaka  - 04/3/2(火) 15:07 -

引用なし
パスワード
   下の部分を
sub 計算()
>  Me.Label1.Caption = Application.Sum(Val(Me.TextBox1.Value),
> Val(Me.TextBox2.Caption), ...)
            ↑ テキストボックスのCaption?
End Sub

とし、

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  計算
End sub

Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  計算
End sub

Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  計算
End sub

と、全てのテキストボックス対して書いてください。
他の方法のクラスは、ちょっと難しいと思います。
あっ、TextBoxのExitイベントでクラスは使えないや...。

【11209】Re:フォーム上への計算結果表示
お礼  あき  - 04/3/2(火) 15:32 -

引用なし
パスワード
   Jaka さんへ

やっとできました。正常に足し算してくれました。
ありがとうございました。

【11212】また適当なこと言ってました。
発言  Jaka  - 04/3/2(火) 17:27 -

引用なし
パスワード
   すみません。

>IMEをOFFにして使ってもらう予定で、

Onですね!
混乱した人、ごめんなさい。

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