Excel VBA質問箱 IV

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

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


8866 / 13644 ツリー ←次へ | 前へ→

【30614】テキストボックスに計算結果を表示させようとすると・・・ VBA初心者 05/11/1(火) 0:04 質問[未読]
【30615】Re:テキストボックスに計算結果を表示させ... かみちゃん 05/11/1(火) 0:08 発言[未読]
【30616】Re:テキストボックスに計算結果を表示させ... VBA初心者 05/11/1(火) 0:35 質問[未読]
【30617】Re:テキストボックスに計算結果を表示させ... かみちゃん 05/11/1(火) 6:38 発言[未読]
【30653】できました!!!! VBA初心者 05/11/1(火) 21:24 お礼[未読]

【30614】テキストボックスに計算結果を表示させよ...
質問  VBA初心者  - 05/11/1(火) 0:04 -

引用なし
パスワード
   初カキコさせていただきます。VBA初心者です。
以下の構成でテキストボックスに数値を入力し、『sgg』『ngg』『ggg』に計算結果(加算)を表示させようとすると、計算結果が「1000+1000=2000」というような計算結果も計算されずに「1000+1000=10001000」となり、『&』で連結されるように個々の数字がくっついた形で表示されます。なぜでしょうか?

※ss(n),sg(n),sr(n),ns(n),ng(n),gs(n),sgg,ngg,ggg・・・全てテキストボックス

Private Sub sr1_afterupdate()
ss1.Value = sg1.Value * sr1.Value
ns1.Value = ng1.Value * sr1.Value
gs1.Value = Int(ss1.Value - ns1.Value)
ss1.Value = FormatNumber(ss1.Value, 2, vbTrue, vbFalse, vbTrue)
ns1.Value = FormatNumber(ns1.Value, 2, vbTrue, vbFalse, vbTrue)
gs1.Value = FormatNumber(gs1.Value, 0, vbTrue, vbFalse, vbTrue)
sgg.Value = ss1.Value + ss2.Value + ss3.Value + ss4.Value + ss5.Value + ss6.Value + ss7.Value + ss8.Value + ss9.Value + sg10.Value + ss11.Value + ss12.Value + ss13.Value + ss14.Value + ss15.Value + ss16.Value + ss17.Value + ss18.Value + ss19.Value + ss20.Value + ss21.Value + ss22.Value + ss23.Value + ss24.Value + ss25.Value
ngg.Value = ns1.Value + ns2.Value + ns3.Value + ns4.Value + ns5.Value + ns6.Value + ns7.Value + ns8.Value + ns9.Value + ns10.Value + ns11.Value + ns12.Value + ns13.Value + ns14.Value + ns15.Value + ns16.Value + ns17.Value + ns18.Value + ns19.Value + ns20.Value + ns21.Value + ns22.Value + ns23.Value + ns24.Value + ns25.Value
ggg.Value = gs1.Value + gs2.Value + gs3.Value + gs4.Value + gs5.Value + gs6.Value + gs7.Value + gs8.Value + gs9.Value + gs10.Value + gs11.Value + gs12.Value + gs13.Value + gs14.Value + gs15.Value + gs16.Value + gs17.Value + gs18.Value + gs19.Value + gs20.Value + gs21.Value + gs22.Value + gs23.Value + gs24.Value + gs25.Value
End Sub
どのように質問の仕方も分からないので稚拙な質問になりましたが、なにとぞよろしくお願い申し上げます。

【30615】Re:テキストボックスに計算結果を表示さ...
発言  かみちゃん  - 05/11/1(火) 0:08 -

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

>以下の構成でテキストボックスに数値を入力し、『sgg』『ngg』『ggg』に計算結果(加算)を表示させようとすると、計算結果が「1000+1000=2000」というような計算結果も計算されずに「1000+1000=10001000」となり、『&』で連結されるように個々の数字がくっついた形で表示されます。なぜでしょうか?

テキストボックスの値は、文字列だからだと思います。
つまり、数値型の変数にいったん入れるか、Val(ss.Value) などと数値型に変換
してしまうかのどちらかでできると思います。

【30616】Re:テキストボックスに計算結果を表示さ...
質問  VBA初心者  - 05/11/1(火) 0:35 -

引用なし
パスワード
   かみちゃんさん
迅速にアドバイスをして頂き、誠にありがとうございます。
私自身がまだまだ勉強不足のようで私なりに頂戴したアドバイスのとおり試みたのですが、どうしても同じ結果になってします。またまた質問なのですが、テキストボックスのデータ型はどのように決まるのでしょうか?
よろしくお願いいたします。

【30617】Re:テキストボックスに計算結果を表示さ...
発言  かみちゃん  - 05/11/1(火) 6:38 -

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

>私なりに頂戴したアドバイスのとおり試みたのですが、どうしても同じ結果になってします。

ss1.Value = FormatNumber(ss1.Value, 2, vbTrue, vbFalse, vbTrue)
ns1.Value = FormatNumber(ns1.Value, 2, vbTrue, vbFalse, vbTrue)
gs1.Value = FormatNumber(gs1.Value, 0, vbTrue, vbFalse, vbTrue)
上記のコードは、何をしているのでしょうか?
FormatNumberの機能は、ご理解いただいていますでしょうか?
今一度ヘルプでご確認ください。
なお、どうしても、上記コードが必要ならば、
ss1.Value = Val(FormatNumber(ss1.Value, 2, vbTrue, vbFalse, vbTrue))
ns1.Value = Val(FormatNumber(ns1.Value, 2, vbTrue, vbFalse, vbTrue))
gs1.Value = Val(FormatNumber(gs1.Value, 0, vbTrue, vbFalse, vbTrue))
としたほうがいいと思います。
また、ss(n),sg(n),sr(n),ns(n),ng(n),gs(n)は、すべてに対して同様です。

>テキストボックスのデータ型はどのように決まるのでしょうか?

Valueプロパティのヘルプを確認してください。
どんな値を入れても「文字列」です。
ちなみに、
MsgBox TypeName(TextBox1.Value)
とすると、「String」(文字列型)と表示されると思います。

【30653】できました!!!!
お礼  VBA初心者  - 05/11/1(火) 21:24 -

引用なし
パスワード
   かみちゃんさん
2回目頂戴したアドバイスを読んでもう一度、1回目のアドバイスをよく読み、コードを書いてみるとできました!とりあえず、右辺のテキストボックスの名前をVAL()で囲むとできました!ユーザーフォーム上のテキストボックスに入れた値がすべて文字型になるのは知りませんでした。VBAって理解するほどに楽しくなっていきますね!理解できるまでアドバイスを頂き、誠にありがとうございました!

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