|
こんばんわ。
下記のような表が、5列目〜31列目を会社A、32列目〜58列目を会社Bと26列毎に9会社あり、その会社毎に、日付と人の計を計算しています。
┌─┬──┬────┬──┬───┬───┬───┬──┬──┬──┬──
│ │A │B │C │D │E │F │・ │・ │AD │AE
├─┼──┼────┼──┼───┼───┴───┴──┴──┴──┴──
│ 1│ │ │ │ │会社A
├─┼──┼────┼──┼───┼───┬───┬──┬──┬──┬──
│ 2│No. │日付 │天気│曜日 │Aさん │Bさん │・ │・ │計 │累計
├─┼──┼────┼──┼───┼───┼───┼──┼──┼──┼──
│ 3│ │ │ │計 │ 4│ 4.5│ 4│ 1.5│ 14│
├─┼──┼────┼──┼───┼───┼───┼──┼──┼──┼──
│ 4│ 1│ 4月26日│晴 │( 水 )│ 1│ │ 1│ │ 2│ 2
├─┼──┼────┼──┼───┼───┼───┼──┼──┼──┼──
│ 5│ 2│ 4月27日│晴 │( 木 )│ │ 1│ │ │ 1│ 3
├─┼──┼────┼──┼───┼───┼───┼──┼──┼──┼──
│ 6│ 3│ 4月28日│晴 │( 金 )│ 1│ 1│ 0.5│ │ 2.5│ 5.5
├─┼──┼────┼──┼───┼───┼───┼──┼──┼──┼──
│ 7│ 4│ 4月29日│晴 │( 土 )│ │ │ 1│ │ 1│ 6.5
├─┼──┼────┼──┼───┼───┼───┼──┼──┼──┼──
│ 8│ 5│ 5月1日│晴 │( 月 )│ │ 0.5│ │ 1│ 1.5│ 8
├─┼──┼────┼──┼───┼───┼───┼──┼──┼──┼──
│ 9│ 6│ 5月2日│曇 │( 火 )│ 1│ │ │ │ 1│ 9
├─┼──┼────┼──┼───┼───┼───┼──┼──┼──┼──
│10│ 7│ 5月8日│曇 │( 月 )│ │ 1│ 1│ │ 2│ 11
├─┼──┼────┼──┼───┼───┼───┼──┼──┼──┼──
│11│ 8│ 5月9日│晴 │( 火 )│ 0.5│ │ │ │ 0.5│11.5
├─┼──┼────┼──┼───┼───┼───┼──┼──┼──┼──
│12│ 9│ 5月10日│雨 │( 水 )│ │ 1│ 0.5│ │ 1.5│ 13
├─┼──┼────┼──┼───┼───┼───┼──┼──┼──┼──
│13│ 10│ 5月11日│雨 │( 木 )│ 0.5│ │ │ 0.5│ 1│ 14
└─┴──┴────┴──┴───┴───┴───┴──┴──┴──┴──
初めはSUM関数で処理していたのですが、行数が増えてくるとBookの容量が大きくなるのでマクロで処理するようにしたのですが、下記の記述では、処理に時間が掛かってしまいます。
Private Sub CommandButton2_Click()
Dim I, G, S As Integer
Dim L, R As Long
Application.EnableEvents = False
'行の計
L = 0
Do While Cells(L + 4, 2).Value <> ""
Cells(L + 4, 30).Value = Application.WorksheetFunction.Sum(Range(Cells(L + 4, 5), Cells(L + 4, 29)))
Cells(L + 4, 57).Value = Application.WorksheetFunction.Sum(Range(Cells(L + 4, 32), Cells(L + 4, 56)))
Cells(L + 4, 84).Value = Application.WorksheetFunction.Sum(Range(Cells(L + 4, 59), Cells(L + 4, 83)))
Cells(L + 4, 111).Value = Application.WorksheetFunction.Sum(Range(Cells(L + 4, 86), Cells(L + 4, 110)))
Cells(L + 4, 138).Value = Application.WorksheetFunction.Sum(Range(Cells(L + 4, 113), Cells(L + 4, 137)))
Cells(L + 4, 165).Value = Application.WorksheetFunction.Sum(Range(Cells(L + 4, 140), Cells(L + 4, 164)))
Cells(L + 4, 192).Value = Application.WorksheetFunction.Sum(Range(Cells(L + 4, 167), Cells(L + 4, 191)))
Cells(L + 4, 219).Value = Application.WorksheetFunction.Sum(Range(Cells(L + 4, 194), Cells(L + 4, 218)))
Cells(L + 4, 246).Value = Application.WorksheetFunction.Sum(Range(Cells(L + 4, 221), Cells(L + 4, 245)))
L = L + 1
Loop
'累計
Cells(4, 31).Value = Cells(4, 30)
Cells(4, 58).Value = Cells(4, 57)
Cells(4, 85).Value = Cells(4, 84)
Cells(4, 112).Value = Cells(4, 111)
Cells(4, 139).Value = Cells(4, 138)
Cells(4, 166).Value = Cells(4, 165)
Cells(4, 193).Value = Cells(4, 192)
Cells(4, 220).Value = Cells(4, 219)
Cells(4, 247).Value = Cells(4, 246)
For G = 27 To 216 Step 27
Cells(4, 31 + G).Value = Cells(4, 30 + G)
Next G
R = 0
Do While Cells(R + 5, 30).Value <> ""
Cells(R + 5, 31).Value = Cells(R + 4, 31) + Cells(R + 5, 30)
Cells(R + 5, 58).Value = Cells(R + 4, 58) + Cells(R + 5, 57)
Cells(R + 5, 85).Value = Cells(R + 4, 85) + Cells(R + 5, 84)
Cells(R + 5, 112).Value = Cells(R + 4, 112) + Cells(R + 5, 111)
Cells(R + 5, 139).Value = Cells(R + 4, 139) + Cells(R + 5, 138)
Cells(R + 5, 166).Value = Cells(R + 4, 166) + Cells(R + 5, 165)
Cells(R + 5, 193).Value = Cells(R + 4, 193) + Cells(R + 5, 192)
Cells(R + 5, 220).Value = Cells(R + 4, 220) + Cells(R + 5, 219)
Cells(R + 5, 247).Value = Cells(R + 4, 247) + Cells(R + 5, 246)
R = R + 1
Loop
'列の計
For I = 5 To 247
Cells(3, I).Value = Application.WorksheetFunction.Sum(Range(Cells(4, I), Cells(35536, I)))
Next I
Application.EnableEvents = True
End Sub
どのようにしたら、早く処理させることが出来るのか、自分なりには考えてみたのですが、さっぱり分からないので、御教授をお願いします。
|
|