本帖最后由 micch 于 2019-2-13 18:59 编辑
思路不对,就费功夫,用循环做了一个,写的真长。结果除法的时候出现除0的错误,懒得改了,只做+-*的等式。列了一个增减变化的表,然后加入字典,循环判断;
- Sub match()
- Dim d, arr, ar, brr(9, 0), i%, n%, ss$, x, a, b
- Set d = CreateObject("Scripting.Dictionary")
- arr = [u2:y13]
- For i = 1 To 12
- d(arr(i, 1) & "+") = arr(i, 3)
- d(arr(i, 1) & "-") = arr(i, 4)
- d(arr(i, 1) & "c") = arr(i, 5)
- Next
- ss = [f11]
- ss = Replace(Replace(ss, "x", "*"), "÷", "/")
- For i = 1 To 5
- x = Mid(ss, i, 1)
- If x = "=" And Mid(ss, 2, 1) = "-" Then
- eqs = Replace(Replace(ss, "=", "-"), "-", "=", , 1)
- If Application.Evaluate(eqs) Then brr(n, 0) = eqs: n = n + 1
- Else
- If d(x & "c") <> "*" Then
- For Each a In Split(d(x & "c"), ",")
- eqs = Mid(Mid(" " & ss, 1, i) & Replace(ss, x, a, i, 1), 2)
- If Application.Evaluate(eqs) Then brr(n, 0) = Replace(eqs, "*", "x"): n = n + 1
- Next
- End If
- If d(x & "-") <> "*" Then
- For Each a In Split(d(x & "-"), ",")
- eqs = Mid(Mid(" " & ss, 1, i) & Replace(ss, x, a, i, 1), 2)
- For k = 1 To 5
- If k <> i And d(Mid(eqs, k, 1) & "+") <> "*" Then
- For Each b In Split(d(Mid(eqs, k, 1) & "+"), ",")
- eqs2 = Mid(Mid(" " & eqs, 1, k) & Replace(eqs, Mid(eqs, k, 1), b, k, 1), 2)
- If Application.Evaluate(eqs2) Then brr(n, 0) = Replace(eqs2, "*", "x"): n = n + 1
- Next b
- End If
- Next k
- Next a
- End If
- End If
- Next i
- If n Then
- [f13].Resize(9).ClearContents
- [f13].Resize(n + 1) = brr
- Else
- [f13].Resize(9).ClearContents
- [f13] = "I can't do it!"
- End If
- End Sub
复制代码
|