ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 2128|回复: 11

[求助] 随机的计算式问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-9-9 10:11 | 显示全部楼层 |阅读模式
本帖最后由 ww200611572 于 2019-9-9 12:58 编辑

求助大神们一个计算式的问题,

现有如下表达式,□中会随机出现加号或者乘号, 加号不会出现再第一个□
□A□B□C□D□E□F

比如正好出现*A*B+C+D*E+F   这时不能立即运算,需要先制定运算顺序--加括号
最终让表达式出现*A*(B+C+D)*(E+F)

请问这个过程怎么用代码实现?
原始算式目标算式
*A*B+C+D*E+F*A*(B+C+D)*(E+F)
*A+B+C*D*E*F*(A+B+C)*D*E*F
*A*B*C*D*E+F*A*B*C*D*(E+F)
*A+B+C+D+E*F*(A+B+C+D+E)*F
转换的过程就是添加括号的过程,简单的说就是把相加的部分全部括号进去
转换原则:
1. 在每个*之后的第一个+之前的字母前加(
2.在下一个*之前,加 )
    3. 如果(之后再也没有*,那就在最后加)


计算式.rar

10.29 KB, 下载次数: 3

TA的精华主题

TA的得分主题

发表于 2019-9-9 10:24 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 Jason_WangSS 于 2019-9-9 10:25 编辑

做下标记,看看别人怎么搞
通常提问要上附件比较有人来帮忙

TA的精华主题

TA的得分主题

发表于 2019-9-9 12:27 | 显示全部楼层
如二楼所说,请楼主上传模拟附件,提供足够的说明数据及实现步骤要求

TA的精华主题

TA的得分主题

发表于 2019-9-9 12:36 | 显示全部楼层
阐述清楚运算规则,基本没难度的

TA的精华主题

TA的得分主题

发表于 2019-9-9 12:46 | 显示全部楼层
  1. '规则不够那就凑,,,

  2. Option Explicit

  3. Sub test()
  4.   Dim s, i, t, flag As Boolean
  5.   s = Split("A□□B□□C□□D□□E□□F", "□")
  6.   Randomize
  7.   For i = 0 To UBound(s)
  8.     If Len(s(i)) = 0 Then
  9.       s(i) = IIf(Rnd < 0.5, "+", "* ")
  10.     End If
  11.   Next
  12.   s = Join(s, vbNullString) & "* "
  13.   If InStr(s, "*") Then
  14.     Do
  15.       flag = False
  16.       t = Split(s, "* ")
  17.       For i = 1 To UBound(t) - 1
  18.         If InStr(t(i), "+") > 0 And InStr(t(i), ")") = 0 Then
  19.           t(i) = "(" & t(i) & ")"
  20.           s = Join(t, "* ")
  21.           flag = True: Exit For
  22.         End If
  23.       Next
  24.     Loop Until Not flag
  25.   End If
  26.   s = "*" & Replace(s, Space(1), vbNullString)
  27.   s = left(s, Len(s) - 1)
  28.   Debug.Print s & vbNewLine & String(20, "=")
  29. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-9-9 12:59 | 显示全部楼层
liulang0808 发表于 2019-9-9 12:27
如二楼所说,请楼主上传模拟附件,提供足够的说明数据及实现步骤要求

又完善了一下说明,麻烦帮忙看看

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-9-9 12:59 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
一把小刀闯天下 发表于 2019-9-9 12:46
'规则不够那就凑,,,

Option Explicit

又完善了一下说明,麻烦帮忙看看

TA的精华主题

TA的得分主题

发表于 2019-9-9 13:11 | 显示全部楼层
ww200611572 发表于 2019-9-9 12:59
又完善了一下说明,麻烦帮忙看看

'继续凑,,,

Option Explicit

Sub test()
  Dim s, i, t, flag As Boolean
  s = Split("A□□B□□C□□D□□E□□F", "□")
  Randomize
  For i = 0 To UBound(s)
    If Len(s(i)) = 0 Then
      s(i) = IIf(Rnd < 0.5, "+", "* ")
    End If
  Next
  s = "* " & Join(s, vbNullString) & "* "
  If InStr(s, "*") Then
    Do
      flag = False
      t = Split(s, "* ")
      For i = 1 To UBound(t) - 1
        If InStr(t(i), "+") > 0 And InStr(t(i), ")") = 0 Then
          t(i) = "(" & t(i) & ")"
          s = Join(t, "* ")
          flag = True: Exit For
        End If
      Next
    Loop Until Not flag
  End If
  s = Replace(s, Space(1), vbNullString)
  s = left(s, Len(s) - 1)
  Debug.Print s & vbNewLine & String(20, "=")
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-9-9 13:18 | 显示全部楼层
  1. Function trans_txt(str1)
  2.     Application.Volatile
  3.     If InStr(str1, "*") > 0 Then
  4.         arr = Split(str1, "*")
  5.         For j = 1 To UBound(arr)
  6.             If Len(arr(j)) > 1 Then
  7.                 arr(j) = "(" & arr(j) & ")"
  8.             End If
  9.         Next j
  10.         trans_txt = Join(arr, "*")
  11.     Else
  12.         trans_txt = str1
  13.     End If
  14. End Function
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-9-9 13:18 | 显示全部楼层
供参考。。。。。。。

计算式.zip

12.74 KB, 下载次数: 4

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-25 18:18 , Processed in 0.050486 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表