我想要一个计算给定范围总和的公式。获取一个单元格中的范围总和
假设我在1,5
中的单元格A1
。我想要一个公式来计算1+2+3+4+5
。 也许以更高级的方式,我想输入1,5;6,3;1,4;...
并计算(1+2+3+4+5)+(6+5+4+3)+(1+2+3+4)
。
不会有任何负数。
这在Excel中有点可能吗?对于范围6,3
,可能最容易获得较低的数字并且计数最多为6.
我想要一个计算给定范围总和的公式。获取一个单元格中的范围总和
假设我在1,5
中的单元格A1
。我想要一个公式来计算1+2+3+4+5
。 也许以更高级的方式,我想输入1,5;6,3;1,4;...
并计算(1+2+3+4+5)+(6+5+4+3)+(1+2+3+4)
。
不会有任何负数。
这在Excel中有点可能吗?对于范围6,3
,可能最容易获得较低的数字并且计数最多为6.
这是user-defined function,它可以满足您的需求。它也适用于底片。没有错误检查,例如单元格中的字母,分号之间的多个逗号(第一个会生成#VALUE错误)。
的一个模块中您的工作簿或在插件进入此功能:
Function AddSubstringProgressions(CellContent As String)
Dim Progressions As Variant
Dim Progression As Variant
Dim i As Long, j As Long
Dim Total As Long
Dim Stepwise As Long
Progressions = Split(CellContent, ";")
For i = LBound(Progressions) To UBound(Progressions)
Progression = Split(Progressions(i), ",")
If Val(Progression(LBound(Progression))) > Val(Progression(UBound(Progression))) Then
Stepwise = -1
Else
Stepwise = 1
End If
For j = Progression(LBound(Progression)) To Progression(UBound(Progression)) Step Stepwise
Total = Total + j
Next j
Next i
AddSubstringProgressions = Total
End Function
这样称呼它:
下面是我想出:
Sub addRange()
Dim cell As Range
Dim count As Integer
count = Application.WorksheetFunction.CountA(Range("A:A"))
Dim i As Integer
i = 1
Do While i <= count
Dim low As Integer
Dim high As Integer
low = Mid(Range("A" & i), 1, Application.WorksheetFunction.Search(",", Range("A" & i)) - 1)
high = Mid(Range("A" & i), Application.WorksheetFunction.Search(",", Range("A" & i)) + 1, Len(Range("A" & i)))
If (low > high) Then
Dim copy As Integer
copy = low
low = high
high = copy
End If
Range("B" & i) = adder(low, high)
i = i + 1
Loop
End Sub
Function adder(low As Integer, high As Integer) As Integer
Dim sum As Integer
sum = 0
Do While low <= high
sum = sum + low
low = low + 1
Loop
adder = sum
End Function
这假定你有像这样的值,6,4
,1,8
,以及其他单元格A1:An。它不适用于像2,5;6,4
这样的值,因为您将其描述为更高级的功能,但它可以为基本功能完成工作。
对于一个工作表函数的方法,你可以尝试以下方法之一:
基本情况如A1 = 1,5
或6,3
=SUMPRODUCT(ROW(INDIRECT(SUBSTITUTE(A1,",",":"))))
一般情况下如A1 = 1,5;6,3;1,4
。
定义名称A =EVALUATE("{"&A1&"}")
,然后输入:
=SUMPRODUCT(ABS(MMULT(A^2,{1;-1}))/2+A)/2
更新。基于上述方法的短VBA udf ...
Function SumSeries(Val As String)
SumSeries = Evaluate("SUM(ABS(MMULT({" & Val & "}^2,{1;-1}))/2+{" & Val & "})/2")
End Function
查找[*算术级数*](http://en.wikipedia.org/wiki/Arithmetic_progression),维基百科的文章为您提供了一个关闭其总和的形式公式。 – dasblinkenlight 2012-07-21 13:28:42
@dasblinkenlight谢谢你的文章。我知道如何计算它,但如何将其作为公式来计算?如何告诉excel以两个用逗号分隔的整数,然后用分号分隔另一个范围? – cherrun 2012-07-21 13:36:47