• ベストアンサー

エクセルVBA 教えてください。

VBAの足し算ですが... 1.A1からA100まで数値があります。 2.A1からA25までの数値合計を算出します。 3.次にA2からA26までの合計を算出します。 4.次にA3からA27までの合計を算出します。 ・ ・ 上の計算のように、上から25個づつを足し算していき、 順次、下に移動して行くような、プログラムは可能でしょうか?また、数値は、100個の時もありますし、200個の時も あるので、どこかで計算を止めなければなません。 「25の範囲の中に空白を見つけたら計算を止める」や 「25の範囲の中に99999を見つけたら計算を止める」など、できますでしょうか? 初歩的な質問で申し訳ありません。 いろいろ探してみたのですが、見つけられなかったので、ご存知の方、いらっしゃいましたらよろしくお願い致します。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 >初歩的な質問で申し訳ありません。 できれば、ご自身は、ここまで考えたというようなものがあると良いですね。 今回、初歩的かどうかは、結果論で、人の評価ですから、私個人は何とも言いようがありませんが、私自身の実力を抜きにして、私自身の感想としては、この手のロジックは、むつかしく感じます。以下、二つ作ってみましたが、どちらも、コードを書く前の見通しからすぐに書けたわけではなく、試行錯誤で、これが簡単とか初歩的とかいう気がしてこないのです。 私の試案: '--------------------------------------- Sub TestSummary1() Dim myRow As Long Dim ret As Variant Const ROW_LIMIT As Long = 100  '設定行  ret = Empty  ret = Application.Match(99999, Range("A1", Range("A1").End(xlDown)), 0)  If IsError(ret) Then   myRow = Range("A1").End(xlDown).Row  Else   myRow = ret - 1 '99999がある場合は、1行手前まで。  End If  If myRow > ROW_LIMIT Then myRow = ROW_LIMIT  With Range("B1").Resize(myRow)    .FormulaLocal = _     "=IF(AND(ISERROR(MATCH(99999,A1:A25,0)),COUNTBLANK(A1:A25)=0),SUM(A1:A25),"""")"    .Value = .Value  End With  Application.ScreenUpdating = True End Sub '--------------------------------------- Loopを使った方法例 Sub TestSummary2()   Dim i As Long   Dim j As Long   Dim myTotal As Double   Application.ScreenUpdating = False   j = 1   For j = 1 To 100    For i = 1 To 25      With Cells(j, 1)       If .Cells(i, 1).Value <> 99999 And .Cells(i, 1).Value <> "" Then         myTotal = myTotal + .Cells(i, 1).Value       Else         GoTo Quit       End If      End With    Next i    Cells(j, 1).Offset(, 1).Value = myTotal    myTotal = 0   Next j Quit:   Application.ScreenUpdating = True End Sub '---------------------------------------

torajiro33
質問者

お礼

ご回答、誠にありがとうございます。 おっしゃられる通り、自分で考えた方法を書いておくべきでした。申し訳ありません・・・ 教えて頂いた2例、とても参考になりました。 改めて、自分の勉強不足をつくづく感じました・・・ またわからない事がありましたらよろしくお願い致します。

その他の回答 (2)

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

こんな感じでしょうか。 Sub sample() Dim Line As Long Line = 25 Do While Cells(Line, 1) <> "" Cells(Line, 2) = WorksheetFunction.Sum(Range("A" & Line - 24 & ":" & "A" & Line)) Line = Line + 1 Loop End Sub >99999を見つけたら計算を止める 簡単ですから、ご自身で改造してみてください。

torajiro33
質問者

お礼

ご回答頂き、誠にありがとうございます。 とても参考になりました。 また、わからない事がありましたらよろしくお願い致します。

  • 6dou_rinne
  • ベストアンサー率25% (1361/5264)
回答No.1

すべてできます。 そんなに難しくありません。

torajiro33
質問者

お礼

ご回答ありがとうございます。 hana-hana3さんとポイントを間違えてしまいました・・・申し訳ありません・・・