こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VBA(合計)

A列に以下のような正の数と負の数が1から305行まであり、
正の数だけを合計したものと負の数だけを合計するVBEをできるだけやさしく教えてください。
A列
1
-2
3
-5
1
2
-6

投稿日時 - 2005-12-05 14:33:22

QNo.1820827

暇なときに回答ください

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

305行までとして下記のような感じでよいのではないでしょうか?
ちなみに正の数字の合計をB1のセルに表示、負の数字の合計をB2のセルに
表示させています。
要は0より大きいか小さいかの判断で305行まで繰返しの処理をさせればよい
かと思います。

Sub 集計()
Dim i As Long, j As Long
Dim Myrow As Long

i = 0
j = 0
For Myrow = 1 To 305
If Cells(Myrow, 1) > 0 Then
i = i + Cells(Myrow, 1).Value
Else
j = j + Cells(Myrow, 1).Value
End If
Next Myrow
Range("B1").Value = i
Range("B2").Value = j
End Sub

投稿日時 - 2005-12-05 14:45:07

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

範囲はA1~A305特定にしておりますが、#1さんが#2で述べているように、範囲を可変にした方が汎用的になると思います。

合計は、EXCELの標準関数[SumIf]を呼び込むことで、一発で算出できます。



Sub Test()
  Dim lngTotal正 As Long
  Dim lngTotal負 As Long
  Dim rng範囲   As Range
  
  '範囲設定
  With Worksheets(1)
    Set rng範囲 = .Range(.Range("A1"), .Range("A305"))
    'A列全体なら
    'Set rng範囲 = .Range("A:A")
  End With
  
  '合計算出
  lngTotal正 = WorksheetFunction.SumIf(rng範囲, ">0", rng範囲)  '正用
  lngTotal負 = WorksheetFunction.SumIf(rng範囲, "<0", rng範囲)  '負用
End Sub

投稿日時 - 2005-12-05 15:57:11

#1です。
私の提示したものはA列の範囲に文字データ等が入っている場合はエラーと
なりますのでご注意下さい。回避されるのであれば、現在の条件プラス数値
データの場合のみという条件を入れる必要があるでしょう。
最終行が不定の場合は「Range("A65536").End (xlUp)」で最終行を得る
必要もあるかと思います。

投稿日時 - 2005-12-05 14:50:21

あなたにオススメの質問