ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 为C列自定义函数的代码运算提速

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-14 22:57 | 显示全部楼层


恳请老师按1楼E12:E15的运算规则编写代码。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-14 23:56 | 显示全部楼层
恳请老师们帮忙解决1楼运行速度特别慢的问题。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-15 00:12 | 显示全部楼层
恳请老师们帮忙解决1楼C列自定义函数公式运算速度慢的问题!

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-15 07:18 | 显示全部楼层
恳请老师们帮忙解决1楼C列自定义函数公式运算速度慢的问题!

TA的精华主题

TA的得分主题

发表于 2018-6-15 07:57 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
其实原来公式就可以!
C6=LENGMA(B2:B6)
下拉即可
请不要重复发帖!!!

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-15 08:05 | 显示全部楼层
YZC51 发表于 2018-6-15 07:57
其实原来公式就可以!
C6=LENGMA(B2:B6)
下拉即可

老师:您说的是哪个公式?

TA的精华主题

TA的得分主题

发表于 2018-6-15 08:12 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
这个
C6=LENGMA(B2:B6)

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-15 08:23 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
YZC51 发表于 2018-6-15 08:12
这个
C6=LENGMA(B2:B6)

老师:运算规则:数据源B5开始的前几行,十位与个位上分别出现的不同数据不足两个时,C列相应位置显示空白才对。4楼群子老师的附件运算速度很快,但运算规则和上述不一致。如何屏蔽不符合运算规则的单元格为空白【即6楼C5:D8出现的问题】?

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-15 08:36 | 显示全部楼层
YZC51 发表于 2018-6-15 08:12
这个
C6=LENGMA(B2:B6)

1楼LENGMA()的原代码是:Function LENGMA(rng As Range) As StringDim ss1 As String, ss2 As String, s1 As String, s2 As String, ar
If rng.Count > 1 Then
  ar = rng
  If ar(UBound(ar), 1) <> "" Then
     s1 = Mid(ar(UBound(ar), 1), 1, 1)
     s2 = Mid(ar(UBound(ar), 1), 2, 1)
     For i = UBound(ar) - 1 To 1 Step -1
        If ss1 = "" And Mid(ar(i, 1), 1, 1) <> s1 Then ss1 = Mid(ar(i, 1), 1, 1)
        If ss2 = "" And Mid(ar(i, 1), 2, 1) <> s2 Then ss2 = Mid(ar(i, 1), 2, 1)
        If ss1 <> "" And ss2 <> "" Then Exit For
     Next
     If ss1 <> "" And ss2 <> "" Then LENGMA = 3 - s1 - ss1 & 3 - s2 - ss2
  End If
End If
End Function
而4楼D列公式的代码是:
Function f(r1, r2, s)
    t11 = Left(r1, 1): t12 = Right(r1, 1)
    t21 = Left(r2, 1): t22 = Right(r2, 1)
    If t11 = t21 Then s1 = Left(s, 1) Else s1 = 3 - t11 - t21
    If t12 = t22 Then s2 = Right(s, 1) Else s2 = 3 - t12 - t22
    f = s1 & s2
End Function



如果E5输入综合公式:=IF(ROW()<15,LENGMA(B$5:B5),f(B4,B5,E4)),就能既保证了计算结果的正确,又极大地提升了运算速度!

我在想,怎样才能把上面的两个代码合二为一?恳请老师们帮忙解决!

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-15 08:53 | 显示全部楼层
本帖最后由 13782671637 于 2018-6-15 09:00 编辑

代码
Function f(r1, r2, s)
    t11 = Left(r1, 1): t12 = Right(r1, 1)
    t21 = Left(r2, 1): t22 = Right(r2, 1)
    If t11 = t21 Then s1 = Left(s, 1) Else s1 = 3 - t11 - t21
    If t12 = t22 Then s2 = Right(s, 1) Else s2 = 3 - t12 - t22
    f = s1 & s2
End Function
的运算规则是:B列相邻2行的数据,个位或十位上数字相同时,继承上一行计算结果。
否则,计算更新为3的补数。(即=3-第1行数-第2行数);


如果能把运算规则修改成:B列数据源十位与个位上分别出现的不同数据不足两个时,C列相应位置显示空白;当十、个位同时出齐两个不同数时,则C列相应位置显示为3的补数(即=3-十位第一个数-十位第二个数&3-个位第一个数-个位第二个数就好了!




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

本版积分规则

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

GMT+8, 2024-12-27 05:21 , Processed in 0.029665 second(s), 5 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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