ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: dongdonggege

[求助] 数组字符串合并(化学式、分子量)(已解决)

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-3-15 22:23 | 显示全部楼层
本帖最后由 dongdonggege 于 2017-3-15 22:25 编辑
cbtaja 发表于 2017-3-15 17:54
进一步简化自定义函数:

大侠,你好,也许我不懂,我觉得,好像比前面的问题更多,无论是化合物,还是水合物,好像都不对。少“+”

TA的精华主题

TA的得分主题

发表于 2017-3-16 00:05 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
dongdonggege 发表于 2017-3-15 22:23
大侠,你好,也许我不懂,我觉得,好像比前面的问题更多,无论是化合物,还是水合物,好像都不对。少“+ ...

哪里少了"+"号?
捕获.PNG

TA的精华主题

TA的得分主题

发表于 2017-3-16 00:18 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
dongdonggege 发表于 2017-3-15 22:23
大侠,你好,也许我不懂,我觉得,好像比前面的问题更多,无论是化合物,还是水合物,好像都不对。少“+ ...

刚才又查了一下百科,KAl(SO4)2•12H2O的分子量精确值为474.388399,说明我的计算是没有错的。
捕获2.PNG

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-3-16 07:56 | 显示全部楼层
cbtaja 发表于 2017-3-16 00:18
刚才又查了一下百科,KAl(SO4)2•12H2O的分子量精确值为474.388399,说明我的计算是没有错的。

昨晚喝了点酒,没怎么仔细看,今天看了下,我是这样用的,分子式没错误,分子量好像显示错误类型。
  1. Sub 分子式分子量()
  2. 's = "KAl(SO4)2·12H2O"
  3. 'MsgBox s & "=" & fzszh("KAl(SO4)2·12H2O") ' & "=" & fzl("KAl(SO4)2·12H2O")
  4. MsgBox fzl("KAl(SO4)2·12H2O")
  5. End Sub
  6. Function fzszh$(ByVal fzs$) '分子式转换
  7.     Set reg = CreateObject("VbScript.RegExp")
  8.     reg.Global = True
  9.     fzszh = fzs
  10.     tmp = Split("(·+)(\d+)([^·]+) +$2*($3) ([a-zA-Z\)])(\d+) $1*$2 ([A-Z][a-z]?|\() +$1 (^|\*|\()\+ $1")
  11.     For i = 0 To UBound(tmp) - 1 Step 2
  12.         reg.Pattern = tmp(i)
  13.         fzszh = reg.Replace(fzszh, tmp(i + 1))
  14.     Next
  15. End Function

  16. Function fzl(ByVal fzs$) '代入元子量,并求出分子量
  17.     yzl = Split("Zn 65 Si 28 Pt 195 Ne 20 Na 23 Mn 55 Mg 24 Hg 201 " & _
  18.         "He 2 Fe 56 Cu 64 Cl 35.5 Ca 40 Ba 137 Au 197 Ar 40 Al 27 " & _
  19.         "Ag 108 S 32 P 31 O 16 N 14 K 39 I 127 H 1 F 19 C 12")
  20.     For i = 0 To UBound(yzl) Step 2
  21.         fzs = Replace(fzs, yzl(i), yzl(i + 1))
  22.     Next
  23.     fzl = Evaluate(fzs)
  24. End Function
复制代码

分子量我不知道怎么用,请帮我改下,谢谢。

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-3-16 08:20 | 显示全部楼层
cbtaja 发表于 2017-3-16 00:18
刚才又查了一下百科,KAl(SO4)2•12H2O的分子量精确值为474.388399,说明我的计算是没有错的。

找到方法了。
  1. Sub 分子式分子量()
  2. s$ = "KAl(SO4)2·12H2O"
  3. MsgBox s & "=" & fzszh(s$) & "=" & fzl(fzszh(s$))
  4. End Sub
复制代码

很高兴,谢谢大侠。
也有缺陷,在ppt中,这个Evaluate出现子过程或函数未定义。
另外再求大侠一个程序,我在《配平化学方程式》http://club.excelhome.net/thread-1333266-1-1.html,化学方程式能配平,但是离子方程式却没办法,如H(+) + NH4(+) + OH(-)=NH3 + H2O,配平后:H(+) + NH4(+) + 2OH(-) =NH3 + 2H2O,再如,MnO(4-) + H(+) + Cl(-) =Mn(2+)+ Cl2 + H2O,配平后:2MnO(4-) + 16H(+) + 10Cl(-) = 2Mn(2+) + 5Cl2 + 8H2O。没法解决,大侠如有兴趣的,麻烦大侠帮忙,再次感谢。

TA的精华主题

TA的得分主题

发表于 2017-3-16 10:51 | 显示全部楼层
dongdonggege 发表于 2017-3-16 08:20
找到方法了。

很高兴,谢谢大侠。

一、在PPT中,虽然不能使用EVALUATE函数,但可以用vbs脚本的Eval函数来替代,方法如下:把31楼的代码第19行,用如下3行代码代替:
  1.     Set ovbs = CreateObject("scriptcontrol")
  2.     ovbs.Language = "vbScript"
  3.     fzl = ovbs.Eval(fzs)
复制代码

二、演示时,可以用一维数组来记录分子式的计算步骤。所有代数式的计算过程演示都可以参照如下代码:
  1. Sub 分子式分子量()
  2. Dim a$(2) '预定义一维数组,其中包含3个Item。如果计算步骤更多,可以修改为相应数值。
  3. a(0) = "KAl(SO4)2·12H2O" '第一步,记录原始的分子式到第1个Item
  4. a(1) = fzszh(a(0))        '第二步,记录转换后的代数式
  5. a(2) = fzl(a(1))          '第三步,记录计算出的分子量
  6. MsgBox Join(a, Chr(10) & "= ")    '用换行符和"= "号,连接各步计算过程,并报告。
  7. End Sub
复制代码


TA的精华主题

TA的得分主题

发表于 2017-3-16 15:10 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
dongdonggege 发表于 2017-3-16 08:20
找到方法了。

很高兴,谢谢大侠。

你上面提到的化学反应(离子)方程式配平的问题,
1、其中举例的第2个离子式中,MnO(4-)是不存在的,所以你“配平”后的离子式两边的电量并不平衡;
正确的高锰酸根离子为MnO4(-),其中的Mn为+7价,或者锰酸根离子MnO4(2-),其中的Mn为+6价
正确的高锰酸根离子与浓盐酸反应的离子方程式为:
2MnO4(-)+16H(+)+16Cl(-)=5Cl2↑+2Mn(2+)+6Cl(-)+8H2O      ——方程式①

2、离子方程式的配平,首先仍要按物质的量配平,然后验算离子的电荷平衡。
比如待配平的离子式MnO4(-)+H(+)+Cl(-)=Cl2↑+Mn(2+)+H2O,要先转化成不带电荷标记的方程式MnO4+H+Cl=Cl2+Mn+8H2O,这样就可用原来的配平工具求解,得到系数的一组整数解{2,16,16,5,2,6,8},然后代入待配平的离子式,得到结果如上面 方程式①所示,经验算,电荷平衡,确认配平成功。

TA的精华主题

TA的得分主题

发表于 2017-3-16 15:10 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 yjh_27 于 2017-3-16 17:00 编辑
cbtaja 发表于 2017-3-15 17:54
进一步简化自定义函数:

熟石膏一水合二硫酸钙 2CaSO₄·H₂O
2CaSO4·H2O转换后
2+Ca+S+O*4·+H*2+O


2*(Ca+S+O*4)+H*2+O


TA的精华主题

TA的得分主题

 楼主| 发表于 2017-3-16 15:55 来自手机 | 显示全部楼层
cbtaja 发表于 2017-3-16 15:10
你上面提到的化学反应(离子)方程式配平的问题,
1、其中举例的第2个离子式中,MnO(4-)是不存在的,所以 ...

谢谢大侠,这两天家里有事,暂时没时间试验,特别感谢大侠的帮助。等事情过后,我再试验并请教大侠

TA的精华主题

TA的得分主题

发表于 2017-3-16 16:08 | 显示全部楼层
本帖最后由 cbm 于 2017-3-16 16:18 编辑

感谢这么多热心大侠 尤其是cbtaja解0人chxw68yjh_27为你们点赞!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-25 03:56 , Processed in 0.043798 second(s), 5 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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