• ベストアンサー

VBA テキストボックス 総和

VBA初心者で色々試行錯誤しながらつくっているのですが フォームにテキストボックス二つを設けてそれぞれに aとbの数値を入力し、aからbまでの総和をcとして メッセージボックスで aからbまでの和はcです。 と表示させたいのですが、計算式の立て方が分かりません。 不足情報がありましたらご指摘下さい。 ご教授の程宜しくお願いします。

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

  • ベストアンサー
  • BookerL
  • ベストアンサー率52% (599/1132)
回答No.1

こんな感じでしょうか。 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) テキストボックスの値が数値でないときなどのエラーチェックとかはしてません。

sunny04510
質問者

お礼

レスありがとうございます。 非常に分かりやすいです。 aとbとcの変数宣言するの忘れてるのに気付けました。 だからmsgboxで望んでいない表示がされていないのだと。 感謝です。

その他の回答 (5)

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

不足の点: 「総和」とは,単純に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

sunny04510
質問者

お礼

いたらぬ点があり申し訳ございません。 >総和 整数の数字が単純に1ずつ増える事を前提としております。 >表示させる 実行コマンドを設けてそのボタンを押下でメッセージボックスを表示させその中で文章を表示させるつもりです。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.5

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 が゛有効で無い場合もあるので。

sunny04510
質問者

お礼

フォームにテキストボックスを設けてその中に数値を入力する事を考えておりました。 説明不足で申し訳ございません。ネチケットの勉強になります。ありがとうございます。 具体的な説明までありがとうございます。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.4

No2です。質問を読み間違えていたので スルーしてください。 >aからbまでの総和 aとbを変更しながら順次たしていくものと思っていました。

sunny04510
質問者

お礼

了解しました。ご丁寧にありがとうございます。 通りで難しいなぁとおもいました^^;

  • m3_maki
  • ベストアンサー率64% (296/460)
回答No.3

こちらの回答が明快ですね。 http://questionbox.jp.msn.com/qa1198481.html テキストボックスが空欄の場合、 a > b の場合、 マイナスの数値の場合などは別に考える必要があります。 等差数列の和 の公式 で 、公差が1の場合で考えれば マイナスでも大丈夫ですね。

sunny04510
質問者

お礼

お礼が抜けておりました。申し訳ございません。 こちらにて訂正と言い事にさせて頂きます。

sunny04510
質問者

補足

レスありがとうございます。 マイナスや同じ数値を入力した場合はまた考慮しなければいけないとは思っておる所です。 ですがその前に自然数として変数の宣言やらがどういう風にたてればいいのか。。。。 といった感じで前に進めませんでした。 ありがとうございます。なんだか懐かしい数式をみれました。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

計算が合うかどうか? ですが。ユーザーフォーム上で、 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

sunny04510
質問者

お礼

レスありがとうございます。 うーむ。僕には分からない情報がいっぱい載ってますね。。。 でもこのレベルまで考えられるようにならなければならないので非常に参考になります。 感謝です。 一つ一つ紐といて行きます。

関連するQ&A