過去ログ

                                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から順に表記するように制御するにはどのように記述すればいいのでしょうか?

どなたか教えていただければ幸いです。
よろしくお願いいたします。
 ───────────────────────────────────────  ■題名 : Re:合計について  ■名前 : ichinose  ■日付 : 02/11/28(木) 8:00  -------------------------------------------------------------------------
   ▼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

シートの関数だけでも可能ですけど・・・。
 ───────────────────────────────────────  ■題名 : Re:合計について  ■名前 : Coo  ■日付 : 02/11/28(木) 22:18  -------------------------------------------------------------------------
   ▼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
 ───────────────────────────────────────  ■題名 : Re:合計について  ■名前 : ichinose  ■日付 : 02/11/28(木) 23:40  -------------------------------------------------------------------------
   ▼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
これで、どうですか?
 ───────────────────────────────────────  ■題名 : ちょっと、修正  ■名前 : ichinose  ■日付 : 02/11/28(木) 23:46  -------------------------------------------------------------------------
   修正です。
>'============================================================
>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
>これで、どうですか?
 ───────────────────────────────────────  ■題名 : Re:ちょっと、修正  ■名前 : Coo  ■日付 : 02/11/30(土) 1:45  -------------------------------------------------------------------------
   ▼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
 ───────────────────────────────────────  ■題名 : Re:ちょっと、修正  ■名前 : ichinose  ■日付 : 02/11/30(土) 9:42  -------------------------------------------------------------------------
   ▼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(・・)」の数式から、この数式の値が各セルに入ります。
 ───────────────────────────────────────  ■題名 : Re:ちょっと、修正  ■名前 : Coo  ■日付 : 02/12/3(火) 20:41  -------------------------------------------------------------------------
   ▼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は今年の夏頃からはじめ、まだいろいろ勉強中ですが、なかな応用が利かないのが現状です。
そんな中、今回はいろいろ教えていただき本当に感謝しています。
ありがとうございました。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 423