VBA编程练习01. 拆分算术表达式

2019-07-19 15:50:07 浏览数 (1)

学习Excel技术,关注微信公众号:

excelperfect

引子:本系列旨在通过一些编程练习,锻炼我们的编程思考能力,提高编码水平,更好地帮助我们解决实际问题。

练习:将算术表达式拆分成组成该表达式的数学元素,例如将表达式2 (19-4)/3拆分成

如何使用VBA代码实现呢?

关键点:如何将表达式中超过1位的数字提取出来,例如上面示例中的数字19。

解决方法:使用一个临时变量判断是否是数字,同时利用这个变量来计算该数字的位数,然后使用该变量作为遍历条件来获取该数字。

VBA代码:

代码语言:javascript复制
Sub SplitExpress()
    '存储表达式的每个字符
    Dim var1()
    '存储表达式中各元素(符号和数字)
    Dim var2()
    '表达式
    Dim express As String
    '循环变量
    Dim i As Long
    Dim j As Long
    '计数,用来确定动态数组大小
    Dim iCount As Long
    '表达式长度
    Dim lLen As Long
    '临时变量,用来存储数字元素中单个数字数
    Dim temp As Long
    '将相邻的数字组合成一个数字元素
    Dim str  As String
    '示例表达式
    '可以换成你自已的表达式
    '或者使用输入框让用户自已输入表达式
    express ="66 {[3 ((5-2)*3 2)/2] [2 (66-3)/3]}"
    lLen = Len(express)   1
    '重定义数组大小为表达式长度
    '注意将数组长度增1
    '以免没有括号时漏掉表达式最后一个数字
    ReDim var1(1 To lLen)
    '将表达式拆分单个字符
    For i = 1 To lLen
        var1(i) = Mid(express,i, 1)
    Next i
    temp = 0
    '遍历表达式
    For i = 1 To lLen
       '如果相邻字符是数字,则将其取出并连接成一个数字
        If var1(i) Like"[0-9]" Then
            temp = temp   1
        ElseIf temp > 0Then
            For j = 1 To temp
                str = str& var1(i - temp   j - 1)
            Next j
            iCount = iCount  1
            ReDim Preserve var2(1To iCount)
            var2(iCount) = str
            temp = 0
            str = ""
        End If
       '如果是符号,则直接存放
        Select Case var1(i)
            Case"{", "[", "(", ")", "}","]", " ", "-", "*", "/"
                iCount = iCount  1
                ReDim Preservevar2(1 To iCount)
                var2(iCount) =var1(i)
        End Select
    Next i
    '将组成表达式的各元素重新组合
    '验证结果是否正确
    For i = LBound(var2) ToUBound(var2)
        str = str &var2(i)
    Next i
    MsgBox "拆分的表达式为:" & str
End Sub

运行代码后的结果如下图1所示。

图1

看到了吗,完美地将表达式复原了!你可以将代码中的代表式换成其他算术表达式试试。

下面是代码的图片版:

0 人点赞