如何在excel中用VBA代码实现有条件的累加,变量是数组的,循环结束后一次性将结果返回到表里

1.A列是文本,B列是数据,结果数据在C列。
2.要求当A列值是相同文本时,就累加B列数据到C列;如果A列值是不同文本时,结果
数据C列等于B列数据。
3. 初值C2等于B2,那么C3的值有以下两种可能。
如果A3的值等于A2,那么C3的值就等于B3+C2
如果A3的值不等于A2,那么C3的值就等于B3
以此类推。
要求C列的值先放在数组里,程序运行完成后再将值一次性赋值给C列。

有几个问题:
1.当A列是相同文本时,这是连续的吗?比如是:11223444576...还是112123332...
2.关于你说的第3点就是这个描述,A1跟A2不相等,但是跟A3相等,这样需要B1和B3的值相加吗?

这两点确认的是同一个问题,如果只需要判断A列跟上一行的值是否相等会简单的多。如果不是就会比较复杂一点。追问

A列值相同的都连续的,即数据已经按A列排过序了

追答

sub 特殊求和()
b = [a65536].End(xlUp).Row
For u = 1 To b
i=1
do
i=i+1
loop until cells(i+u,1).valuecells(i,1).value and cells(u,1).value""
cells(u,3)=Application.WorksheetFunction.Sum(range(cells(u,2),cells(u+p-1,2)))
i=i+p-1
next i
end sub

只是在记事本里简单写了下思路。调试的时候改一下就好了。

追问

不好意思,我是初学者,经调试失败,请提供完整的代码,谢谢!

追答

可以发我邮箱表样式,[email protected],大概今天8点左右能回复你,白天工作比较忙。
Sub 按公式算法()
Application.ScreenUpdating = False
Range("e:e") = Empty
a = Range("a65536").End(xlUp).Row
Cells(2, 5).Value = Cells(2, 3).Value
For i = 3 To a
If Cells(i, 1).Value = Cells(i - 1, 1).Value Then
Cells(i, 5).Value = Cells(i - 1, 5).Value + Cells(i, 3).Value
Else
Cells(i, 5).Value = Cells(i, 3).Value
End If
Next i
Application.ScreenUpdating = True
MsgBox "计算完毕!"
End Sub

温馨提示:答案为网友推荐,仅供参考