Page 423 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼合計について Coo 02/11/27(水) 23:03 ┗Re:合計について ichinose 02/11/28(木) 8:00 ┗Re:合計について Coo 02/11/28(木) 22:18 ┗Re:合計について ichinose 02/11/28(木) 23:40 ┗ちょっと、修正 ichinose 02/11/28(木) 23:46 ┗Re:ちょっと、修正 Coo 02/11/30(土) 1:45 ┗Re:ちょっと、修正 ichinose 02/11/30(土) 9:42 ┗Re:ちょっと、修正 Coo 02/12/3(火) 20:41 ─────────────────────────────────────── ■題名 : 合計について ■名前 : Coo ■日付 : 02/11/27(水) 23:03 -------------------------------------------------------------------------
以前もお世話になった者です。 今回も基礎的なことなのかもしれませんがかなり悩んだのですが、かいけつできなかったのでどなたか教えてください。 今、セルC1からC5まで1から5の数字が入力されています。 この状態で、変数aとn(5)を与え、n=1のときaにセルC1の値を、n=2のときセルC1からC2の合計値を、n=3のときセルC1からC3の合計値をセルD1から順に表記するように制御するにはどのように記述すればいいのでしょうか? どなたか教えていただければ幸いです。 よろしくお願いいたします。 |
▼Coo さん: おはようございます。 >以前もお世話になった者です。 >今回も基礎的なことなのかもしれませんがかなり悩んだのですが、かいけつできなかったのでどなたか教えてください。 > >今、セルC1からC5まで1から5の数字が入力されています。 >この状態で、変数aとn(5)を与え、n=1のときaにセルC1の値を、n=2のときセルC1からC2の合計値を、n=3のときセルC1からC3の合計値をセルD1から順に表記するように制御するにはどのように記述すればいいのでしょうか? 以下は、n=5のときの例です。適当に変更して下さい。 '============================================================= Sub test() Dim n As Integer n = 5 MsgBox WorksheetFunction.Sum(Range("$c$1").Resize(n, 1)) End Sub シートの関数だけでも可能ですけど・・・。 |
▼ichinose さん: こんばんわ、解答ありがとうございます。 少し意図が違うのでもう一度質問させていただきます。 下記プログラム中の?????部分に n=1の時x(1)=C1 n=2の時x(2)=C1+C2 n=3の時x(3)=C1+C2+C3 n=4の時x(4)=C1+C2+C3+C4 n=5の時x(5)=C1+C2+C3+C4+C5 ・ ・ ・ n=10の時x(10)=C1+C2+C3+C4+C5+・・・+C10 というように合計値をセルD列に入力していきたいのですが・・・ この後の計算でこれらの合計値をしようしたく、是非セルへ入力して確認用に残しておきたく、このようなことがしたいのですが何か良い方法はあるでしょうか? Sub test() Dim n As Integer Dim x(10) As Double st1: a = Application.InputBox("計算回数を入力して下さい。", Type:=1) If a = 0 Then Exit Sub n = Range("B2").End(xlDown).Row ’B1からB10には認識用の任意の数字が入っています。 If a > n Then MsgBox "面データがありません。最大数は" & n & "面です。" GoTo st1 End If For n = 1 To a x(n) = ????? ’C1からC10までには1から10の数字が入っています。 Cells(n, 4) = x(n) Next n End Sub |
▼Coo さん: こんばんは。 >少し意図が違うのでもう一度質問させていただきます。 すみません、文章読解力に乏しくて・・・。 再度です。 '============================================================ Sub test() Dim a Dim n As Integer Do a = Application.InputBox("計算回数を入力して下さい。", Type:=1) n = Range("B2").End(xlDown).Row 'B1からB10には認識用の任意の数字が入っています。 If VarType(a) = vbBoolean Then MsgBox "終了します" Exit Do ElseIf a > n Then MsgBox "面データがありません。最大数は" & n & "面です。" Else With Range(Cells(1, 4), Cells(a, 4)) .Formula = "=sum($c$1:c1)" .Value = .Value End With Exit Do End If Loop End Sub これで、どうですか? |
修正です。 >'============================================================ >Sub test() > Dim a > Dim n As Integer > Do > a = Application.InputBox("計算回数を入力して下さい。", Type:=1) > n = Range("B2").End(xlDown).Row > 'B1からB10には認識用の任意の数字が入っています。 > If VarType(a) = vbBoolean Then > MsgBox "終了します" > Exit Do > ElseIf a > n Then > MsgBox "面データがありません。最大数は" & n & "面です。" > Else If a > 0 Then > With Range(Cells(1, 4), Cells(a, 4)) > .Formula = "=sum($c$1:c1)" > .Value = .Value > End With End If > Exit Do > End If > Loop >End Sub >これで、どうですか? |
▼ichinose さん: 解答ありがとうございます。 利用させていただきました。 下記のプログラムの様に追加して使用してみました。上手く動いたのですが、幾つか質問があります。 色々教えていただいているにも関わらず申し訳ないのですが・・・ 質問.1 (1)式の部分で希望通り、セルに合計値を表示させていただいているみたいなのですが、 この部分を無くしてセルへの直接表記の変わりに合計値をx(n)のような配列を宣言して c(1)=Cells(1,3)、x(2)=Cells(1,3)+Cells(2,3)、・・・x(10)=Cells(1,3)+Cells(2,3)+ ・・・+Cells(10,3)と言うような形ではプログラムできないものでしょうか? この形で(2)式をb(n) = x(n) * 20 / 3.14というように表記してみたいのですが・・・ もし可能であるなら、このような方法も教えていただけないでしょうか? 質問2."=sum($c$1:c1)" の$マークの意味 質問3.Value = .Value の表記の意味 本当に厚かましいと思うのですが、是非よろしくお願いいたします。 Sub test() Dim n As Integer Dim b(30) As Double '←追加部分 Do a = Application.InputBox("計算回数を入力して下さい。", Type:=1) n = Range("B2").End(xlDown).Row 'B1からB10には認識用の任意の数字が入っています。 If VarType(a) = vbBoolean Then MsgBox "終了します" Exit Do ElseIf a > n Then MsgBox "面データがありません。最大数は" & n & "面です。" Else If a > 0 Then With Range(Cells(1, 4), Cells(n, 4)) ’・・・(1) .Formula = "=sum($c$1:c1)" .Value = .Value End With For n = 1 To a - (a / 2) '←追加部分・・・(2)aには偶数しか入れません。 b(n) = Cells(2 * n - 1, 4) * 20 / 3.14 '←追加部分 Debug.Print b(n) '←追加部分 Next n '←追加部分 End If Exit Do End If Loop End Sub |
▼Coo さん: おはようございます。 下記のプログラムの様に追加して使用してみました。上手く動いたのですが、幾つか質問があります。 >色々教えていただいているにも関わらず申し訳ないのですが・・・ > >質問.1 >(1)式の部分で希望通り、セルに合計値を表示させていただいているみたいなのですが、 >この部分を無くしてセルへの直接表記の変わりに合計値をx(n)のような配列を宣言して >c(1)=Cells(1,3)、x(2)=Cells(1,3)+Cells(2,3)、・・・x(10)=Cells(1,3)+Cells(2,3)+ >・・・+Cells(10,3)と言うような形ではプログラムできないものでしょうか? >この形で(2)式をb(n) = x(n) * 20 / 3.14というように表記してみたいのですが・・・ >もし可能であるなら、このような方法も教えていただけないでしょうか? > >Sub test() > > Dim n As Integer > Dim b(30) As Double '←追加部分 > Do > a = Application.InputBox("計算回数を入力して下さい。", Type:=1) > n = Range("B2").End(xlDown).Row > 'B1からB10には認識用の任意の数字が入っています。 > If VarType(a) = vbBoolean Then > MsgBox "終了します" > Exit Do > ElseIf a > n Then > MsgBox "面データがありません。最大数は" & n & "面です。" > Else > If a > 0 Then For i = 1 To a b(i) = 0 For j = 1 To i b(i) = b(i) + Cells(j, 3).Value Next j Cells(i, 4).Value = b(i) Next i 'こういうロジックということですか? > For n = 1 To a - (a / 2) '←追加部分・・・(2)aには偶数しか入れません。 > b(n) = Cells(2 * n - 1, 4) * 20 / 3.14 '←追加部分 > Debug.Print b(n) '←追加部分 > Next n '←追加部分 > End If > Exit Do > End If > Loop >End Sub >質問2."=sum($c$1:c1)" の$マークの意味 絶対番地と相対番地の特徴を使ったものです。 $が付くと絶対番地。 ちなみに、手動操作でセルD1に 「=sum($c$1:c1)」に入力した後、このD1をコピーし、例えば、D2〜D10に貼り付けてみて下さい。c1のほうは、c2、c3、・・・と変わっていると思います。 この性質を利用しています。 >質問3.Value = .Value の表記の意味 このコードにより、「=sum(・・)」の数式から、この数式の値が各セルに入ります。 |
▼ichinose さん: こんばんわ。 > If a > 0 Then > For i = 1 To a > b(i) = 0 > For j = 1 To i > b(i) = b(i) + Cells(j, 3).Value > Next j > Cells(i, 4).Value = b(i) > Next i 上記のコードを応用させていただき上手くいきました。 For文の利用でできるんですね。 なにか複雑に考えすぎていたみたいです・・・ VBAは今年の夏頃からはじめ、まだいろいろ勉強中ですが、なかな応用が利かないのが現状です。 そんな中、今回はいろいろ教えていただき本当に感謝しています。 ありがとうございました。 |