2012-07-21 43 views
0

我想要一个计算给定范围总和的公式。获取一个单元格中的范围总和

假设我在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.

+0

查找[*算术级数*](http://en.wikipedia.org/wiki/Arithmetic_progression),维基百科的文章为您提供了一个关闭其总和的形式公式。 – dasblinkenlight 2012-07-21 13:28:42

+0

@dasblinkenlight谢谢你的文章。我知道如何计算它,但如何将其作为公式来计算?如何告诉excel以两个用逗号分隔的整数,然后用分号分隔另一个范围? – cherrun 2012-07-21 13:36:47

回答

3

这是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 

这样称呼它:

enter image description here

+0

你如何做到这一点,所以你可以在电子表格中调用宏作为常规公式? – jrad 2012-07-21 15:58:53

+0

@JackRadcliffe,请参阅答案开头的用户定义函数链接。基本上,只需将其粘贴到普通模块即可。 – 2012-07-21 16:01:20

+0

那。是。所以。凉。谢谢! – jrad 2012-07-21 16:02:52

0

下面是我想出:

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这样的值,因为您将其描述为更高级的功能,但它可以为基本功能完成工作。

1

对于一个工作表函数的方法,你可以尝试以下方法之一:

  1. 基本情况如A1 = 1,56,3

    =SUMPRODUCT(ROW(INDIRECT(SUBSTITUTE(A1,",",":")))) 
    
  2. 一般情况下如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 
相关问题