Excel VBA中如何支持复数计算?
2016-06-08 20:38
465 查看
答案居然是需要自己定义复数计算。
内置built-in的WorkSheetFunction还是VBA函数都不支持复数类型。
转一个
内置built-in的WorkSheetFunction还是VBA函数都不支持复数类型。
转一个
Option Explicit Const pi = 3.14159265358979 Type Complex re As Double im As Double End Type Public Function AddComplex(a As Complex, b As Complex) As Complex AddComplex.re = a.re + b.re AddComplex.im = a.im + b.im End Function Public Function MultiplyComplex(a As Complex, b As Complex) As Complex MultiplyComplex.re = a.re * b.re - a.im * b.im MultiplyComplex.im = a.re * b.im + a.im * b.re End Function Public Function Conjugate(a As Complex) As Complex Conjugate.re = a.re Conjugate.im = -a.im End Function Public Function Modulo(a As Complex) As Double Modulo = Sqr(a.re ^ 2 + a.im ^ 2) End Function Public Function Argument(a As Complex) As Double Dim i As Integer Dim v(1 To 4) As Double If (z.re = 0) And (z.im = 0) Then Argument = -10 'End Function End If v(1) = ArcSin(z.im / Modulo(z)) v(2) = mcPI - v(1) v(3) = ArcCos(z.re / Modulo(z)) v(4) = -1 * v(3) For i = 1 To 4 While v(i) > mcPI v(i) = v(i) - 2 * mcPI Wend While v(i) < mcPI v(i) = v(i) + 2 * mcPI Wend Next i If v(1) = v(3) Then Argument = v(1) If v(2) = v(3) Then Argument = v(2) If v(1) = v(4) Then Argument = v(1) If v(2) = v(4) Then Argument = v(2) End Function ' Code by : Steven Roland Bazinet (ArcSin function only) Private Function ArcSin(vntSine As Variant) As Double On Error GoTo ERROR_ArcSine Const cOVERFLOW = 6 Dim blnEditPassed As Boolean Dim dblTemp As Double blnEditPassed = False If IsNumeric(vntSine) Then If vntSine >= -1 And vntSine <= 1 Then blnEditPassed = True dblTemp = Sqr(-vntSine * vntSine + 1) If dblTemp = 0 Then ArcSin = Sgn(vntSine) * pi / 2 Else ArcSin = Atn(vntSine / dblTemp) End If End If End If EXIT__ArcSine: If Not blnEditPassed Then Err.Raise cOVERFLOW Exit Function ERROR_ArcSine: On Error GoTo 0 blnEditPassed = False Resume EXIT__ArcSine End Function ' Code by : PaperCut, based (very much!) on Steven R Bazinet's code Private Function ArcCos(vntcos As Variant) As Double On Error GoTo ERROR_ArcSine Const cOVERFLOW = 6 Dim blnEditPassed As Boolean Dim dblTemp As Double blnEditPassed = False If IsNumeric(vntcos) Then If vntcos >= -1 And vntcos <= 1 Then blnEditPassed = True dblTemp = Sqr(-vntcos * vntcos + 1) If dblTemp = 0 Then ArcCos = Sgn(vntcos) * pi / 2 Else ArcCos = Atn(dblTemp / vntcos) End If End If End If EXIT__ArcCos: If Not blnEditPassed Then Err.Raise cOVERFLOW Exit Function ERROR_ArcCos: On Error GoTo 0 blnEditPassed = False Resume EXIT__ArcSine End Function
相关文章推荐
- Outlook 批量发送邮件
- Mootools 1.2教程 函数
- VBA将excel数据表生成JSON文件
- excel vba 限制工作表的滚动区域代码
- VBA解决Windows空当接龙的617局
- excel vba 高亮显示当前行代码
- autoit InputBox 函数
- 文件遍历排序函数
- 关于C#中排序函数的总结
- Oracle 函数大全[字符串函数,数学函数,日期函数]第1/4页
- ASP下经常用的字符串等函数参考资料
- PostgreSQL教程(五):函数和操作符详解(1)
- DOS批处理 函数定义与用法
- asp Chr 函数 数字转字母的方法
- Lua中的函数精讲笔记
- Lua中的闭合函数、非全局函数与函数的尾调用详解
- Lua中调用C++函数示例
- Lua实现split函数
- Lua常用时间函数使用实例
- Lua函数与字符串处理简明总结