ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决] 在 VBA 中如何使用以下函数公式?——感谢 LMY123、liu-aguang 大侠鼎力相助

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-4-18 19:47 | 显示全部楼层 |阅读模式
本帖最后由 雨雪霏霏 于 2014-4-20 15:49 编辑

  在 B2 输入以下公式可以将 A2 的 “978-7-5038-6461-2”在 B2 中转换为“7-5038-6461-3”。
  请教各位兄弟姐妹:如何把公式用在 VBA 中,即只要活动单元格是在A2中,我运行一下宏,就自动将 A2 中的内容更改为“7-5038-6461-3”。十分感谢!
  
=MID(A2,5,12)&IF(11-MOD(MID(SUBSTITUTE(A2,"-",),4,1)*10+MID(SUBSTITUTE(A2,"-",),5,1)*9+MID(SUBSTITUTE(A2,"-",),6,1)*8+MID(SUBSTITUTE(A2,"-",),7,1)*7+MID(SUBSTITUTE(A2,"-",),8,1)*6+MID(SUBSTITUTE(A2,"-",),9,1)*5+MID(SUBSTITUTE(A2,"-",),10,1)*4+MID(SUBSTITUTE(A2,"-",),11,1)*3+MID(SUBSTITUTE(A2,"-",),12,1)*2,11)=10,"X",IF(11-MOD(MID(SUBSTITUTE(A2,"-",),4,1)*10+MID(SUBSTITUTE(A2,"-",),5,1)*9+MID(SUBSTITUTE(A2,"-",),6,1)*8+MID(SUBSTITUTE(A2,"-",),7,1)*7+MID(SUBSTITUTE(A2,"-",),8,1)*6+MID(SUBSTITUTE(A2,"-",),9,1)*5+MID(SUBSTITUTE(A2,"-",),10,1)*4+MID(SUBSTITUTE(A2,"-",),11,1)*3+MID(SUBSTITUTE(A2,"-",),12,1)*2,11)=11,0,11-MOD(MID(SUBSTITUTE(A2,"-",),4,1)*10+MID(SUBSTITUTE(A2,"-",),5,1)*9+MID(SUBSTITUTE(A2,"-",),6,1)*8+MID(SUBSTITUTE(A2,"-",),7,1)*7+MID(SUBSTITUTE(A2,"-",),8,1)*6+MID(SUBSTITUTE(A2,"-",),9,1)*5+MID(SUBSTITUTE(A2,"-",),10,1)*4+MID(SUBSTITUTE(A2,"-",),11,1)*3+MID(SUBSTITUTE(A2,"-",),12,1)*2,11)))

TA的精华主题

TA的得分主题

发表于 2014-4-18 20:19 | 显示全部楼层
参考
工作簿1.zip (8.53 KB, 下载次数: 29)

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-4-18 21:01 | 显示全部楼层
本帖最后由 雨雪霏霏 于 2014-4-18 21:10 编辑

  感谢 LMY123 兄神速帮忙!确实达到了使用 VBA 的效果!很理想!
  只是,工程密码多少?我看不到“Sub a()”之外的代码。是在 VBA 中写了自定义函数了吗?
  我想实现的具体效果是:
  只要活动单元格是A2,我运行一下宏,就自动将 A2 中原来的“978-7-5038-6461-2”的内容更改为“7-5038-6461-3”——在原单元格上改动,改动之后,活动单元格仍然是A2。也就是说“978-7-5038-6461-2”单元格不论是在工作表中的哪个位置,我只要选中该单元格,运行宏后就改它为“7-5038-6461-3”。

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-4-18 21:12 | 显示全部楼层
LMY123 发表于 2014-4-18 20:19
参考

  目前 LMY123 兄的宏,运行起来的时候,感觉还有一些短暂的界面闪动,是不是可以做到界面没有任何变化,只是单元格的结果发生变化?

TA的精华主题

TA的得分主题

发表于 2014-4-18 21:21 | 显示全部楼层
本帖最后由 LMY123 于 2014-4-18 21:25 编辑
雨雪霏霏 发表于 2014-4-18 21:12
  目前 LMY123 兄的宏,运行起来的时候,感觉还有一些短暂的界面闪动,是不是可以做到界面没有任何变化 ...

参考

Sub g()
arr = Split(Cells(2, 1), "-")
For x = 1 To UBound(arr) - 1
t = arr(UBound(arr)) + 1
s = s & "-" & arr(x)
Next x
[b2] = Mid(s, 2) & "-" & t
End Sub
Sub g2()
Application.ScreenUpdating = False
[b1] = Split([a2], "-", 2)(1)
    Range("B1").Select
    Selection.AutoFill Destination:=Range("B1:B2"), Type:=xlFillDefault
    Range("B1:B2").Select
    Range("B1").Select
    Selection.ClearContents
Application.ScreenUpdating = True
End Sub

TA的精华主题

TA的得分主题

发表于 2014-4-18 21:28 | 显示全部楼层
雨雪霏霏 发表于 2014-4-18 21:01
  感谢 LMY123 兄神速帮忙!确实达到了使用 VBA 的效果!很理想!
  只是,工程密码多少?我看不到“S ...

Sub g()
arr = Split(Cells(2, 1), "-")
For x = 1 To UBound(arr) - 1
t = arr(UBound(arr)) + 1
s = s & "-" & arr(x)
Next x
[a2] = Mid(s, 2) & "-" & t
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-4-18 21:49 | 显示全部楼层
LMY123 发表于 2014-4-18 21:28
Sub g()
arr = Split(Cells(2, 1), "-")
For x = 1 To UBound(arr) - 1

  感谢 LMY123 兄费心费神编写了新宏!深深感激!
  第一个宏使用快速,体验很好。
  第二个宏通过改造也可以实现第一个宏的效果。
  第三个宏是直接实现了我想要的在原单元格上更改的效果。——感谢 LMY123 兄用心!

  只是,我再深入测试了一下,VBA 编码得到的结果是错误的,而通过原来的公式手动操作是可以得到正确结果的。不知道问题出在哪里。

13位码—————978-7-5391-3110-8
使用公式的结果正确:7-5391-3110-1
使用编码的结果错误:7-5391-3110-9


13位码—————978-7-5391-3112-2
使用公式的结果正确:7-5391-3112-8
使用编码的结果错误:7-5391-3112-3


13位码—————978-7-5391-3108-5
使用公式的结果正确:7-5391-3108-X
使用编码的结果错误:7-5391-3108-6


  请看参考帖:
http://club.excelhome.net/thread-387048-1-1.html

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-4-18 22:04 | 显示全部楼层
LMY123 发表于 2014-4-18 21:28
Sub g()
arr = Split(Cells(2, 1), "-")
For x = 1 To UBound(arr) - 1

  还有两帖可参考:
http://club.excelhome.net/thread-224404-1-1.html
http://www.douban.com/group/topic/8559059/

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-4-18 23:18 | 显示全部楼层
LMY123 发表于 2014-4-18 21:28
Sub g()
arr = Split(Cells(2, 1), "-")
For x = 1 To UBound(arr) - 1

  另外,还有一帖是反方向的,由 10 位转换到 13 位,也可参考:
http://club.excelhome.net/thread-72142-1-1.html

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-4-19 11:51 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-16 12:59 , Processed in 0.031293 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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