想用VBA实现有条件的求和:
每一行有90列数值,现在想要从第一个不是0的单元格向后12个单元格求和,这个要怎么写代码...Data里是原始数据,AA是要的计算结果,DimiAsDoubleDimjA...
每一行有90列数值,现在想要从第一个不是0的单元格向后12个单元格求和,这个要怎么写代码...
Data里是原始数据,AA是要的计算结果,
Dim i As Double
Dim j As Double
'j为数据起始列
i = 2
j = 12
'If Sheets(Data).Cells(i, j) > 0 Then
Sheets(AA).Cells(i, j - 2) = WorksheetsFunction.Sum(Range(Sheets(Data).Cells(i, j)), Sheets(Data).Cells(i, j + 11))
MsgBox
Sheets(AA).Cells(i, j - 1) = WorksheetsFunction.Sum(Range(Sheets(Data).Cells(i, j + 12)), Sheets(Data).Cells(i, j + 23))
Sheets(AA).Cells(i, j) = WorksheetsFunction.Sum(Range(Sheets(Data).Cells(i, j + 24)), Sheets(Data).Cells(i, j + 35))
Else
j = j + 1
End If
这个哪里出错了呢.... 展开
Data里是原始数据,AA是要的计算结果,
Dim i As Double
Dim j As Double
'j为数据起始列
i = 2
j = 12
'If Sheets(Data).Cells(i, j) > 0 Then
Sheets(AA).Cells(i, j - 2) = WorksheetsFunction.Sum(Range(Sheets(Data).Cells(i, j)), Sheets(Data).Cells(i, j + 11))
MsgBox
Sheets(AA).Cells(i, j - 1) = WorksheetsFunction.Sum(Range(Sheets(Data).Cells(i, j + 12)), Sheets(Data).Cells(i, j + 23))
Sheets(AA).Cells(i, j) = WorksheetsFunction.Sum(Range(Sheets(Data).Cells(i, j + 24)), Sheets(Data).Cells(i, j + 35))
Else
j = j + 1
End If
这个哪里出错了呢.... 展开
展开全部
i 和 j 没放到循环语句中。
下面给你演示个不用循环就可以计算出来的简单例子,希望你能从中举一反三。
设活动工作表中有如下格式的数据,其中 D6:D7 为存放代码计算出来的结果区域
【参考 VBA 代码】
Public Sub Sum12Num()
With ActiveSheet.Cells(6, 4)
.FormulaArray = "=SUM(OFFSET(INDEX(2:2,,MATCH(TRUE,2:2<>0,0)),,,,12))"
.AutoFill .Resize(2)
.Value2 = .Value2
End With
End Sub
【关键技术分析】
公式数组
=SUM(OFFSET(INDEX(2:2,,MATCH(TRUE,2:2<>0,0)),,,,12))
Step1
用 MATCH 函数查找第二行首个不为 0 的单元格所在的列索引号。
返回 >> 5
Step2
用 INDEX 继续在第二行中查找首个不为 0 的单元格,其中第三个参数使用了 Step1 中返回的列索引号。
返回 >> 对 E5 单元格的引用
Step3 >> 用 OFFSET 函数对 Step2 返回的单元格引用(E5)往右调整 12 个单元格。
返回 >> E2:P2
Step4 >> 用 SUM 函数对 Step3 返回的 12 个单元格区域求和
【程序运行动画效果】
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询