- ベストアンサー
エクセルVBA 教えてください。
VBAの足し算ですが... 1.A1からA100まで数値があります。 2.A1からA25までの数値合計を算出します。 3.次にA2からA26までの合計を算出します。 4.次にA3からA27までの合計を算出します。 ・ ・ 上の計算のように、上から25個づつを足し算していき、 順次、下に移動して行くような、プログラムは可能でしょうか?また、数値は、100個の時もありますし、200個の時も あるので、どこかで計算を止めなければなません。 「25の範囲の中に空白を見つけたら計算を止める」や 「25の範囲の中に99999を見つけたら計算を止める」など、できますでしょうか? 初歩的な質問で申し訳ありません。 いろいろ探してみたのですが、見つけられなかったので、ご存知の方、いらっしゃいましたらよろしくお願い致します。
- みんなの回答 (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 '---------------------------------------
その他の回答 (2)
- hana-hana3
- ベストアンサー率31% (4940/15541)
こんな感じでしょうか。 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を見つけたら計算を止める 簡単ですから、ご自身で改造してみてください。
お礼
ご回答頂き、誠にありがとうございます。 とても参考になりました。 また、わからない事がありましたらよろしくお願い致します。
- 6dou_rinne
- ベストアンサー率25% (1361/5264)
すべてできます。 そんなに難しくありません。
お礼
ご回答ありがとうございます。 hana-hana3さんとポイントを間違えてしまいました・・・申し訳ありません・・・
お礼
ご回答、誠にありがとうございます。 おっしゃられる通り、自分で考えた方法を書いておくべきでした。申し訳ありません・・・ 教えて頂いた2例、とても参考になりました。 改めて、自分の勉強不足をつくづく感じました・・・ またわからない事がありましたらよろしくお願い致します。