答案已更新:
代码如下,供复制:
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的才输出。以减少结果输出的行数。如何加这个条件?
追答答案已经更新过了,请重新查看主答区。
谢谢您!您的代码我试了可行,但是由于我的数值比较多,导致办输出结果超过了Excel的最大行数。所以我想对计算结果进行比较过滤后再输出,比如合计值大于100且小于200的才输出。以减少结果输出的行数。如何加这个条件?
追答加条件不免费。