想用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
这个哪里出错了呢....
展开
 我来答
K_BEAT
2016-11-28 · TA获得超过1245个赞
知道小有建树答主
回答量:879
采纳率:91%
帮助的人:402万
展开全部

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 个单元格区域求和


【程序运行动画效果】


推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式