色の知識で人生の可能性が広がる!みんなに役立つ色彩検定 >>

添付のVBAマクロ問題の回答わかる方いらっしゃるでしょうか。

自分なりに作成してみたのですが、思うような動作になりませんでした。
Private Sub CommandButton1_Click()
Dim i, 最初, 終わり As Long
最初 = TextBox1.Value
終わり = TextBox2.Value

Label3 = 0
i = 0
Do While i < 終わり
Label3 = Label3 + (最初 + i)
i = i + 1
Loop

End Sub

「値を合計していくvba」の質問画像
教えて!goo グレード

A 回答 (3件)

おはようございます。



一例ですが、下記でどうでしょうか?

Private Sub CommandButton1_Click()
Dim i As Long, 最初 As Long, 終わり As Long, 合計 As Long
最初 = TextBox1.Value
終わり = TextBox2.Value
合計 = 0
For i = 最初 to 終わり
合計 = 合計 + i
Next i
Label3 = 合計
End Sub
    • good
    • 0
この回答へのお礼

おはようございます。

求めていた動作になりました。
回答を参考にDo~Loopでも書いてみましたが、無事に実行できました。
ありがとうございます!

Private Sub CommandButton1_Click()
Dim i As Long, 最初 As Long, 終わり As Long, 合計 As Long
最初 = TextBox1.Value
終わり = TextBox2.Value
合計 = 0
i = 最初
Do While i <= 終わり
合計 = 合計 + i
i = i + 1
Loop
Label3 = 合計
End Sub

お礼日時:2022/01/21 11:39

ええと...



Label3 = Label3 + (最初 + i)

これがおかしいですね。
2回ループすると ”最初” の値が2回足されます。
3回ループすると ”最初” の値が3回足されます。

この、”最初” の値を足すのはループの外に置きましょう。


・・・超余談・・・

数学的にはループを使わなくても別の計算式でもできるんですけどね。
1からnまでの数を足した値は次のように求めることができます。
 n×(n+1)÷2

1から3なら、
 ■
 ■■
 ■■■
という三角形を考える。
そして同じ形の物をもう一つ用意してひっくり返して並べる。
 ■  ■■■
 ■■  ■■
 ■■■  ■
で、合体させて長方形にする。
 ■■■■
 ■■■■
 ■■■■
すると、縦は3、横は3+1の長方形になる。
面積は普通に3×(3+1)で求められる。
でも欲しいのはその半分の値。
で、2で割る。
 3×(3+1)÷2
=3×4÷2
=6

こんな考え方になります。

・・・
そんなわけで、1から60までの値を足す計算は
 60×61÷2=1830
で求められます。
で、ここから1から9までの値を足した数値を引けばいい。
与えられている数値は10なので、
 (10-1)×10÷2=45
を引くという事になります。
すると
 60×(60+1)÷2-(10-1)×10÷2
すなわち、
 「終わり」×(「終わり」+1)÷2 - (「始め」-1)×「始め」÷2
この計算でも良いって事になります。

これなら For Next や Do while を使わなくても良い。
    • good
    • 1
この回答へのお礼

For Next や Do whileで行き詰った場合は、計算での算出方法も検討しようと思います。
詳細にありがとうございます!

お礼日時:2022/01/21 11:46

Label3 = 0


For i = 最初 to 終わり
 Label3 = Label3 + i
Next i
    • good
    • 1
この回答へのお礼

ありがとうございます!

お礼日時:2022/01/21 11:42

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

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

教えて!goo グレード

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング