2014-11-05 53 views

回答

3

您可以使用SUMPRODUCT这一点。

假设X是在细胞B1和n是在细胞B2:

=SUMPRODUCT((B1+1)^ROW(INDIRECT("1:"&B2))) 

ROW(INDIRECT("1:"&B2))返回的数字1和n之间的阵列,其SUMPRODUCT求和之前提高每个X+1通过。

输出

enter image description here

+0

您的解决方案对于特定示例非常有用(+1)。但我认为它不适用于数学总和的所有情况。这就是我选择加里的答案的原因。谢谢。 – viniciussss 2014-11-05 20:23:48

+0

了解。他的确更清晰! ROW函数使得我的公式变得丑陋,但我会对'SUMPRODUCT'不能使用的求和示例感兴趣。 – 2014-11-05 20:31:05

+0

我在想i的增量不是i = i + 1而是其他函数。例如:http://math.stackexchange.com/questions/348571/summation-skip-notation – viniciussss 2014-11-05 20:39:52

3

使用以下用户定义函数

Public Function vini(x As Long, N As Long) 
    Dim i As Long 
    For i = 1 To N 
     vini = vini + (x + 1)^i 
    Next i 
End Function 

用户定义函数(UDF)是非常容易安装和使用:

  1. ALT-F11带来了VBE窗口
  2. ALT-I ALT-M打开一个新的模块
  3. 粘贴东西并关闭VBE窗口

如果保存工作簿,UDF将随之保存。 如果您正在使用一个版本的Excel更高然后2003,你必须保存 该文件作为.XLSM而非的.xlsx

要删除UDF:

  1. 弹出窗口VBE如上
  2. 清晰的代码进行
  3. 关闭VBE窗口

从Excel使用UDF:

= VINI(A1,A2)

要了解更多关于一般的宏,请参阅:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

以及有关UDF的细节,请参见:

http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx

必须启用宏才能使其工作!

对于示例:

vini

+0

真棒,但有没有什么办法指定函数也作为第三个参数?与函数我的意思是summand – 2017-10-21 17:24:44

+0

@RicardoZorio作为第三个参数传递一个工作表函数id是非常容易的。 – 2017-10-21 18:28:30

0

OK,我做了一些研究,发现如何解析表达式做的总和。这是基于加里的学生的回答,所以请按照他的指示,只更改代码。所有的荣誉给他。顺便说一句,我知道这应该是他的回答中的评论,但代码在评论中看起来很可怕。

功能:

Public Function summation(lower As Long, upper As Long, summand As String) 
    Dim i As Long 
    Dim total As Long 
    Dim original As String 
    Dim temporal As String 
    total = 0 
    For i = lower To upper 
     temporal = Replace(summand, "i", i) 
     total = total + Evaluate(temporal) 
    Next i 
    summation = total 
End Function 

用法:

=summation(lower bound, upper bound, summand) 

实施例:

输入:

table { 
 
    font-family: consolas, sans-serif; 
 
    border-collapse: collapse; 
 

 
} 
 

 
td, th { 
 
    border: 1px solid #dddddd; 
 
    text-align: left; 
 
    padding: 8px; 
 
} 
 

 
tr:nth-child(even) { 
 
    background-color: #dddddd; 
 
}
<table> 
 
    <tr> 
 
    <th></th> 
 
    <th>D</th> 
 
    <th>E</th> 
 
    <th>F</th> 
 
    <th>G</th> 
 
    </tr> 
 
    <tr> 
 
    <td><b>1</b></td> 
 
    <td>from</td> 
 
    <td>to</td> 
 
    <td>summand</td> 
 
    <td>result</td> 
 
    </tr> 
 
    <tr> 
 
    <td><b>2</b></td> 
 
    <td>1</td> 
 
    <td>8</td> 
 
    <td>(10+1)^i</td> 
 
    <td>=summation(D2,E2,F2)</td> 
 
    </tr> 
 
</table>

输出:

table { 
 
    font-family: consolas, sans-serif; 
 
    border-collapse: collapse; 
 

 
} 
 

 
td, th { 
 
    border: 1px solid #dddddd; 
 
    text-align: left; 
 
    padding: 8px; 
 
} 
 

 
tr:nth-child(even) { 
 
    background-color: #dddddd; 
 
}
<table> 
 
    <tr> 
 
    <th>C</th> 
 
    <th>D</th> 
 
    <th>E</th> 
 
    <th>F</th> 
 
    <th>G</th> 
 
    </tr> 
 
    <tr> 
 
    <td><b>1</b></td> 
 
    <td>from</td> 
 
    <td>to</td> 
 
    <td>summand</td> 
 
    <td>result</td> 
 
    </tr> 
 
    <tr> 
 
    <td><b>2</b></td> 
 
    <td>1</td> 
 
    <td>8</td> 
 
    <td>(10+1)^i</td> 
 
    <td>235794768</td> 
 
    </tr> 
 
</table>

如果需要参数的值使用字符串

table { 
 
    font-family: consolas, sans-serif; 
 
    border-collapse: collapse; 
 

 
} 
 

 
td, th { 
 
    border: 1px solid #dddddd; 
 
    text-align: left; 
 
    padding: 8px; 
 
} 
 

 
tr:nth-child(even) { 
 
    background-color: #dddddd; 
 
}
<table> 
 
    <tr> 
 
    <th>C</th> 
 
    <th>D</th> 
 
    <th>E</th> 
 
    <th>F</th> 
 
    <th>G</th> 
 
    </tr> 
 
    <tr> 
 
    <td><b>1</b></td> 
 
    <td>from</td> 
 
    <td>to</td> 
 
    <td>summand</td> 
 
    <td>result</td> 
 
    </tr> 
 
    <tr> 
 
    <td><b>2</b></td> 
 
    <td>1</td> 
 
    <td>8</td> 
 
    <td>="(" & D4 & "+1)^i"</td> 
 
    <td>=summation(D2,E2,F2)</td> 
 
    </tr> 
 
    <tr> 
 
    <td><b>3</b></td> 
 
    <td>10</td> 
 
    <td></td> 
 
    <td></td> 
 
    <td></td> 
 
    </tr> 
 
</table>

enter image description here

再次,所有的荣誉加里的学生。