あるデータソースの行を列固定で順番に確認していって、
①変数にそれまで確認した値を足していく
②空白が出てきたらそのセルに合計値を足す
③合計値を初期化して再度次の行から確認を始める
④それを最終行から2行目まで行う
という関数を作ったのですが、どうも記述量がおおくなってしまいました。
クラスにして使いまわせればと思っているのですがどのようにコードを書いたらいいでしょうか?
そもそもクラスを使うまでもないでしょうか?
以下実際に書いたコードになります。
VBA
1Sub NewForm_4() '合計時間の計算 2 3Dim Total1, Total2, Total3, Total4, Total5, Total6 As Long 4Set nws = Workbooks("実績集計表作成ver2.21").Worksheets("分析シート(作業者)") 5LastRow = nws.Cells(Rows.Count, 1).End(xlUp).Row 6 7For i = LastRow To 2 Step -1 '最終行からスタート 8 9 If nws.Cells(i, 11) <> "" Then 'i行目が空白でなければTotalへ数字を足す 10 11 'それぞれ求めたい合計値が異なるので変数を分けている 12 Total1 = Total1 + nws.Cells(i, 11) '作業時間 13 Total2 = Total2 + nws.Cells(i, 13) '前作業 14 Total3 = Total3 + nws.Cells(i, 14) '設備稼働時間 15 Total4 = Total4 + nws.Cells(i, 15) '後作業 16 Total5 = Total5 + nws.Cells(i, 16) 'インターバル 17 Total6 = Total6 + nws.Cells(i, 20) '総作業時間 18 19 ElseIf nws.Cells(i, 11) = "" Then 20 '11行目が空白であればTotalの中身を記述する 21 nws.Cells(i, 11) = Total1 22 nws.Cells(i, 13) = Total2 23 nws.Cells(i, 14) = Total3 24 nws.Cells(i, 15) = Total4 25 nws.Cells(i, 16) = Total5 26 nws.Cells(i, 20) = Total6 27 28 '変数の初期化 29 Total1 = 0 30 Total2 = 0 31 Total3 = 0 32 Total4 = 0 33 Total5 = 0 34 Total6 = 0 35 36 End If 37 38Next i 39 40End Sub
> ①変数にそれまで確認した値を足していく
> ②空白が出てきたらそのセルに合計値を足す
> ③合計値を初期化して再度次の行から確認を始める
空白セルが 2 行以上連続している範囲が現れた場合は
どのようになさりたいのでしょうか。
> そもそもクラスを使うまでもないでしょうか?
記述されてある通りの処理を行なうだけなら
必要だとは思えません。
空白セル自体もとのデータソースにプログラムで追加しているものなので、連続することはありません。
クラスを使うまでもなさそうですね。
何枚か似たような若干違うレイアウトのシートを作るのですが
Total1 = Total1 + nws.Cells(i, 11) '作業時間
Total2 = Total2 + nws.Cells(i, 13) '前作業
Total3 = Total3 + nws.Cells(i, 14) '設備稼働時間
Total4 = Total4 + nws.Cells(i, 15) '後作業
Total5 = Total5 + nws.Cells(i, 16) 'インターバル
Total6 = Total6 + nws.Cells(i, 20) '総作業時間
の部分は変わらないので使いまわせたらと思い、質問させてもらいました。
回答2件
あなたの回答
tips
プレビュー