- ベストアンサー
VBA テキストボックス 総和
VBA初心者で色々試行錯誤しながらつくっているのですが フォームにテキストボックス二つを設けてそれぞれに aとbの数値を入力し、aからbまでの総和をcとして メッセージボックスで aからbまでの和はcです。 と表示させたいのですが、計算式の立て方が分かりません。 不足情報がありましたらご指摘下さい。 ご教授の程宜しくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
こんな感じでしょうか。 Dim a As Long Dim b As Long Dim s As Long Dim i As Long a = TextBox1.Value b = TextBox2.Value s = 0 For i = a To b s = s + i Next i MsgBox ("aからbまでの和は " & s) テキストボックスの値が数値でないときなどのエラーチェックとかはしてません。
その他の回答 (5)
- keithin
- ベストアンサー率66% (5278/7941)
不足の点: 「総和」とは,単純に1ずつ増やした数字の和の意味か,それとも積分(面積)の意味なのか,どっちでしょう。 入れる数字は必ず整数のつもりなのでしょうか。たとえば「0.5から1.2まで」とかだと,「1ずつ増える」といった仮定も意味が無くなります。 こういったことは,「具体的な事例」と「そのとき欲しい答えの数字」といった具体例をキチンとご相談に書いておくと,下手に言葉を費やすよりもうちょっと意味が通じるようになります。 不足の点: >表示させたい 何をしたら表示させたいのですか。 ちなみにchangeイベントとか使ってしまうと,テキストボックスに数字を記入している最中にもバシバシとマクロが走ってとても使えません。 作成例:少し極端に修正をする場合 private sub CommandButton1_Click() if not isnumeric(me.textbox1) or not isnumeric(me.textbox2) then msgbox "input numbers" exit sub end if me.textbox1 = fix(me.textbox1) me.textbox2 = fix(me.textbox2) msgbox "result: " & application.sum(me.textbox1, me.textbox2) * (abs(me.textbox1 - me.textbox2) + 1) / 2 end sub
お礼
いたらぬ点があり申し訳ございません。 >総和 整数の数字が単純に1ずつ増える事を前提としております。 >表示させる 実行コマンドを設けてそのボタンを押下でメッセージボックスを表示させその中で文章を表示させるつもりです。
- imogasi
- ベストアンサー率27% (4737/17069)
VBAことはエクセルVBAでVB、VB.NETではないよね。 >aからbまでの総 セル範囲の数値の総和を求めるのか。 みんなが見る質問コーナーなのだから、神経をつかって、表現して。 整数ならaからb間での和は出るだろうが、実数などでは考えられないでしょう。 それに質問には簡単化したデータ例を挙げるもんだ。 テキストボックスもシートに貼り付ける場合と、フォームに貼り付ける場合と区別して質問すること。 コマンドボタンのクリックで計算を行う方式を勧める。 A列 A1:A10BC列は確認用 1 0 23 0 14 1 14 12 1 12 5 0 6 1 6 3 0 2 0 11 1 11 10 1 10 87 53 ーーー 標準モジュールに Private Sub CommandButton1_Click() f = Val(TextBox1.Text) t = Val(TextBox2.Text) MsgBox f & "から" & t x = WorksheetFunction.SumIf(Range("A1:A10"), ">" & f, Range("A1:A10")) - _ WorksheetFunction.SumIf(Range("A1:A10"), ">" & t, Range("A1:A10")) MsgBox x End Sub ーー フォームに暦ストボックス2つとコマンドボタンを1つ貼り付け コマンドボタンのクリックイベントに Private Sub CommandButton1_Click() f = Val(TextBox1.Text) t = Val(TextBox2.Text) MsgBox f & "から" & t x = WorksheetFunction.SumIf(Range("A1:A10"), ">" & f, Range("A1:A10")) - _ WorksheetFunction.SumIf(Range("A1:A10"), ">" & t, Range("A1:A10")) MsgBox x End Sub 以下、以上、未満で不等号を按配してください。 ーー エクセル関数をVBAで使っているが、2007以後ならSUMIFS関数や Private Sub CommandButton1_Click() f = Val(TextBox1.Text) t = Val(TextBox2.Text) MsgBox f & "から" & t d = Range("A65536").End(xlUp).Row MsgBox d tt = 0 For i = 1 To d If Cells(i, "A") > f And Cells(i, "A") < t Then tt = tt + Cells(i, "A") End If Next i MsgBox tt End Sub のようなコードもありうる。 最終行に気をつけてください。データのありようでは、d = Range("A65536").End(xlUp).Row が゛有効で無い場合もあるので。
お礼
フォームにテキストボックスを設けてその中に数値を入力する事を考えておりました。 説明不足で申し訳ございません。ネチケットの勉強になります。ありがとうございます。 具体的な説明までありがとうございます。
- piroin654
- ベストアンサー率75% (692/917)
No2です。質問を読み間違えていたので スルーしてください。 >aからbまでの総和 aとbを変更しながら順次たしていくものと思っていました。
お礼
了解しました。ご丁寧にありがとうございます。 通りで難しいなぁとおもいました^^;
- m3_maki
- ベストアンサー率64% (296/460)
こちらの回答が明快ですね。 http://questionbox.jp.msn.com/qa1198481.html テキストボックスが空欄の場合、 a > b の場合、 マイナスの数値の場合などは別に考える必要があります。 等差数列の和 の公式 で 、公差が1の場合で考えれば マイナスでも大丈夫ですね。
お礼
お礼が抜けておりました。申し訳ございません。 こちらにて訂正と言い事にさせて頂きます。
補足
レスありがとうございます。 マイナスや同じ数値を入力した場合はまた考慮しなければいけないとは思っておる所です。 ですがその前に自然数として変数の宣言やらがどういう風にたてればいいのか。。。。 といった感じで前に進めませんでした。 ありがとうございます。なんだか懐かしい数式をみれました。
- piroin654
- ベストアンサー率75% (692/917)
計算が合うかどうか? ですが。ユーザーフォーム上で、 Dim ans As Long Private Sub b_Change() ans = ans + IIf(Me!a.Text <> "", (CLng(Me!a.Value)), 0) + IIf(Me!b.Text <> "", (CLng(Me!b.Value)), 0) End Sub Private Sub c_Enter() Me!c.Value = ans End Sub Private Sub CommandButton1_Click() ans = 0 Me!c.Text = "" End Sub
お礼
レスありがとうございます。 うーむ。僕には分からない情報がいっぱい載ってますね。。。 でもこのレベルまで考えられるようにならなければならないので非常に参考になります。 感謝です。 一つ一つ紐といて行きます。
お礼
レスありがとうございます。 非常に分かりやすいです。 aとbとcの変数宣言するの忘れてるのに気付けました。 だからmsgboxで望んでいない表示がされていないのだと。 感謝です。