求Excel做一个循环求和函数或宏

将数值所有组和及其求和快速输出。如下图。

答案已更新:

代码如下,供复制:

Sub 我的程序()

Dim Ti As Double

Ti = Timer '记住开始时间

'获取数组源的数组

Dim arr As Variant

arr = Range("C3:d3").Value '****************************【在此行修改数据源的区域】

'开始计算

Dim i%, t%, n%, k&, s1$, s2$, iSum#, brr$()

For i = LBound(arr, 2) To UBound(arr, 2) - 1

n = i + 1 '初始化n

line:

s1 = "" '初始化s2

For t = n To UBound(arr, 2)

'数据计算

s1 = s1 & "+" & arr(1, t)

s2 = arr(1, i) & s1

'判断并输出结果

iSum = Evaluate(s2) '计算合计的值

If iSum >= 0 And iSum <= 2000 Then '***********【在此行修改结果值的范围】

k = k + 1 '累加数量

ReDim Preserve brr$(1 To 2, 1 To k)

brr(1, k) = s2

brr(2, k) = iSum

End If

'递归判断

If t = UBound(arr, 2) Then

If n < UBound(arr, 2) Then

n = n + 1 '重置n

GoTo line '递归跳转

End If

End If

Next

Next

'输出数据

With Range("B6") '**************************************【在此行修改输出位置的单元格】

.Resize(Rows.Count - .Row + 1, 2).Clear '清空

'输出标题和格式

With .Resize(1, 2)

.Value = Array("表达式", "结果") '输出标题

.HorizontalAlignment = xlCenter '居中对齐

.Interior.Color = 15652798 '背景颜色:浅蓝

.Borders.LineStyle = xlContinuous '添加框线

End With

'放不开的情况处理

Dim m As Long

If k > Rows.Count - .Row Then

m = k - (Rows.Count - .Row)

k = Rows.Count - .Row

ReDim Preserve brr$(1 To 2, 1 To k)

End If

'输出结果和格式

.Offset(1).Resize(k, 2) = WorksheetFunction.Transpose(brr) '输出结果数组

.Offset(1).Resize(k).HorizontalAlignment = xlLeft '居左对齐

.Offset(1, 1).Resize(k).HorizontalAlignment = xlCenter '居中对齐

.Offset(1).Resize(k, 2).Borders.LineStyle = xlContinuous '添加框线

'弹出提示框

s1 = "计算完毕" & vbLf & vbLf & "秒数:" & Round(Timer - Ti, 3)

If m > 0 Then s1 = s1 & vbLf & vbLf & "受行数所限," & m & "个结果被舍弃。"

MsgBox s1, 64

End With

End Sub

追问

谢谢您!您的代码我试了可行,但是由于我的数值比较多,导致办输出结果超过了Excel的最大行数。所以我想对计算结果进行比较过滤后再输出,比如合计值大于100且小于200的才输出。以减少结果输出的行数。如何加这个条件?

追答

答案已经更新过了,请重新查看主答区。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2023-09-15
在Excel中,可以使用以下公式来实现循环求和:
=SUM(IF(MOD(ROW(),2)=0,A1:A10,0))

其中,A1:A10是需要进行求和的数据范围,可以根据实际情况进行修改。
这个公式使用了一个IF函数和一个MOD函数,IF函数用于判断当前行是否是偶数行,如果是,则返回对应单元格的值,否则返回0。MOD函数用于计算当前行号除以2的余数,如果余数是0,说明当前行是偶数行,否则是奇数行。
通过循环执行这个公式,就可以实现对A1:A10范围内的数据进行循环求和。具体操作步骤如下:
在Excel中输入公式:=SUM(IF(MOD(ROW(),2)=0,A1:A10,0))
按Enter键确认。
选择需要进行求和的数据范围,例如A1:A10。
点击工具栏上的“开始”按钮,选择“填充”,然后选择“向下填充”。
重复上述步骤,直到所有需要进行求和的数据范围都被填充完毕。
通过以上步骤,就可以实现循环求和的功能。需要注意的是,这个公式只适用于对连续数据进行求和的情况,如果数据是分隔开的,需要使用其他公式进行处理。
第2个回答  2023-09-15
Sub 全遍历()
Dim Arr, Dic As Object, Dk, i&, j&
Set Dic = CreateObject("Scripting.Dictionary")
Arr = [A1:D1]
Arr = Application.WorksheetFunction.Transpose(Arr)
Arr = Application.WorksheetFunction.Transpose(Arr)
For i = 1 To UBound(Arr)
Dk = Dic.Keys
For j = 0 To UBound(Dk)
Dic(Dk(j) & "+" & Arr(i)) = Dic(Dk(j)) + Arr(i)
Next j
Dic(Arr(i)) = Arr(i)
Next i
[A3].Resize(Dic.Count, 2) = Application.WorksheetFunction.Transpose(Array(Dic.Keys, Dic.Items))
Set Dic = Nothing
End Sub
已知数据和输出位置请自行修改程序。追问

谢谢您!您的代码我试了可行,但是由于我的数值比较多,导致办输出结果超过了Excel的最大行数。所以我想对计算结果进行比较过滤后再输出,比如合计值大于100且小于200的才输出。以减少结果输出的行数。如何加这个条件?

追答

加条件不免费。

第3个回答  2023-09-14
为什么没有4+5+15?