根据条件在vba中添加行和列

时间:2016-05-20 06:21:43

标签: excel vba excel-vba

我有一些数据,我试图计算每个月的1-15个的每个变量的总和,然后是月的剩余天数。 数据存在于名为"数据"就像

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

数据是全年的,但我正在尝试jan-march持续时间。输出在表格"摘要"并且格式应为

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

请帮助我找到更好的方法。

1 个答案:

答案 0 :(得分: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

希望这有帮助。