EXCEL如何让计算式内数值都乘以一个系数,显示新计算式的函数,以此类推?

 我来答
Excel大咖分享秀
2019-12-16 · 专注给你心跳加速的Excel工具及体验
Excel大咖分享秀
采纳数:43 获赞数:178

向TA提问 私信TA
展开全部

针对这个用一个自定义函数解决;

真是第二次更新版,适应各种复杂公式的情况。

在工作表中,按Alt+F11进入VBE窗口,依次按Alt、i、m插入一个模块,将代码复制进行进去,关闭VBE界面回到excel。

可按照公式输入,修改你的算式,并提供也给直接计算结果的函数

比如:

b1=FormulaModify(A1,1.3)

c1=GetFormulaResult(A1)

代码如下:

Option Explicit

Function GetFormulaResult(ByVal 算式 As Variant) As Double

GetFormulaResult = Application.Evaluate("=" & 算式)

End Function

Function FormulaModify(ByVal 算式 As Variant, ByVal 系数 As Double) As String

    Dim arr, brr As Variant

    Dim i, k As Long

    Dim x, result As String

    

    arr = SplitNull(算式)

    'MsgBox Join(arr, "")

    

    ReDim brr(1 To UBound(arr))

    k = 1: i = 1

    For i = 1 To UBound(arr)

        If VBA.IsNumeric(arr(i)) Or Asc(arr(i)) = 46 Then

        

        Else

             brr(k) = i: k = k + 1

        End If

    Next

    

    ReDim Preserve brr(1 To k - 1)

    'MsgBox Join(brr, "/")

    

    For i = 1 To UBound(brr)

        If i = 1 Then

            If brr(i) = 1 Then

                result = arr(i)

            Else

                x = CDbl(Mid(算式, 1, brr(i) - 1)) * 系数

                result = IIf(x Like ".*", Application.Text(0 & x, "@"), x) & arr(brr(i))

            End If

        Else

            If brr(i) - brr(i - 1) = 1 Then

                x = ""

            Else

                x = CDbl(Mid(算式, brr(i - 1) + 1, brr(i) - brr(i - 1) - 1)) * 系数

            End If

            result = result & IIf(x Like ".*", Application.Text(0 & x, "@"), x) & arr(brr(i))

        End If

    Next

    If brr(i - 1) <> Len(算式) Then

        x = CDbl(Mid(算式, brr(i - 1) + 1, Len(算式) - brr(i - 1))) * 系数

        result = result & IIf(x Like ".*", Application.Text(0 & x, "@"), x)

    End If

    FormulaModify = result

End Function


Function SplitNull(ByVal SourceString As String) As Variant

    Dim i, arr() As Variant

    ReDim arr(1 To Len(SourceString))

    For i = 1 To Len(SourceString)

        arr(i) = VBA.Mid(SourceString, i, 1)

    Next

    SplitNull = arr()

End Function

更多追问追答
追问

谢谢!但是单元格内有乘号的就显示#VALUE!  麻烦大神再次处理下,还有就是系数改成1.2,新的计算式显示还是1+2+3?再次感谢。

追答
这个公式只针对单一运算符有效,多种类型复杂运算,处理起来相对比较复杂,还要花点精力进一步优化,暂时没有更好的思路。
我有思路了再给你持续优化。
最爱陈家乐cs
2019-12-13 · TA获得超过5523个赞
知道大有可为答主
回答量:1.1万
采纳率:100%
帮助的人:385万
展开全部
具体点,如果是数值,可以用复制--选择性粘贴--勾选乘来做,如果是公式要看具体情况。
追问
原先的计算式内的数值都乘以系数2,然后显示新的计算式。您说的是出结果,我要的还是新的计算式。这样说可以理解我的意思了吗?
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
晓风流韵10
2019-12-13 · TA获得超过425个赞
知道答主
回答量:215
采纳率:32%
帮助的人:61.3万
展开全部
好像只能数值运算,运算式好像不能自动算,也没办法像你那样,或许需要高手帮你解决
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式