2016-05-20 2 views
1

У меня есть некоторые данные, для которых я пытаюсь вычислить сумму каждой переменной в течение 1-15 числа каждого месяца, а затем оставшихся дней месяца. Данные присутствует в листе под названием «данные» и какДобавление строк и столбцов в vba на основе критериев

Var 1-Jan 2-Jan 3-Jan 4-Jan 5-Jan 6-Jan 7-Jan 8-Jan 9-Jan 10-Jan 11-Jan 12-Jan 13-Jan 14-Jan 15-Jan 16-Jan... 
var1 8 4 14 18 1 12 36 18 38 37 11 43 5 30 40 1 
var2 29 39 40 10 12 21 27 31 10 21 5 14 14 33 17 13 
var3 46 27 5 32 4 28 8 15 46 19 19 24 44 15 25 20 
var4 5 46 27 21 10 19 26 34 38 38 33 16 23 2 26 8 
var5 25 8 32 37 45 13 45 45 42 31 10 4 8 46 30 20 

Данные за весь год, но я стараюсь на протяжении января-марта. Выход в листовом «Резюме» и должны быть в формате

Var jan 1-15 jan 15-31 feb 1-15 feb 16-28 mar 1-15 mar 15-31 
var1 sum sum sum sum...   
var2 sum...     
var3       
var4       
var5 

Я пытался написать код VBA, как

Sub sum_data() 

Dim flag1, flag2, k, sum 
Dim arr As Variant 
arr = Array(2, 15, 16, 15, 13, 15, 16) 
flag1 = arr(0) 

For i = 2 To 7 
Sheets("data").Select 
flag2 = flag1 + arr(i-1) - 1 
For j = 2 To 5 
sum = Application.sum(Range(Cells(j, flag1), Cells(j, flag2))) 
Sheets("summary").Select 
Cells(j, i) = sum 
Next j 
flag1 = flag2 + 1 
Next i 

End Sub 

Пожалуйста, помогите мне найти лучший способ сделать это.

+2

6}. arr - индекс на основе нуля. например {0-6} не {1-9} – Jeeped

ответ

1

В коде, где вы выбираете «итоговый» лист в первой сумме, есть ошибка, но затем во второй раз, когда вы хотите суммировать, вы не переключаетесь на другой лист.

Это лучший подход, фактически переключения между листами:

For i = 2 To 7 
    flag2 = flag1 + arr(i - 1) - 1 
    For j = 2 To 5 
     sum = Application.sum(Sheets("data").Range(Cells(j, flag1), Cells(j, flag2))) 
     Sheets("summary").Cells(j, i) = sum 
    Next j 
    flag1 = flag2 + 1 
Next i 

Надеется, что это помогает.

Смежные вопросы