ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

[复制链接]

TA的精华主题

TA的得分主题

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

代码
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-个位第一个数-个位第二个数

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-15 10:28 | 显示全部楼层
代码
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-个位第一个数-个位第二个数)

TA的精华主题

TA的得分主题

发表于 2018-6-15 11:57 | 显示全部楼层
代码
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-个位第一个数-个位第二个数)

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-15 13:30 | 显示全部楼层

代码
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-个位第一个数-个位第二个数)

TA的精华主题

TA的得分主题

发表于 2018-6-15 14:34 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-6-15 15:29 | 显示全部楼层
冷码的 “012”周期  不好理解,请解释。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-15 15:39 | 显示全部楼层
zopey 发表于 2018-6-15 15:29
冷码的 “012”周期  不好理解,请解释。

老师:“012”代表3个不同的数,如B18=02,
                                                B19=12,
                                                B20=01,则:B18:B20的十位上缺"012"的2,个位数缺缺"012"的0,20就是冷码。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-15 15:57 | 显示全部楼层
zopey 发表于 2018-6-15 15:29
冷码的 “012”周期  不好理解,请解释。

也就是:十、个位分别出齐两个不同数【“012”里的任意两个】的情况下,各自在“012”中所缺少的那个数就是冷码。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-15 16:17 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

恳请老师们帮忙解决!

TA的精华主题

TA的得分主题

发表于 2018-6-15 17:15 | 显示全部楼层
Sub 按钮1_Click()
Columns("d:d").ClearContents
Dim arr, k0, brr(), crr(), drr(), frr()
k0 = [b5].End(4).Row - 4
ReDim brr(1 To k0, 1 To 4)
ReDim crr(0 To 2), drr(0 To 2)
ReDim frr(1 To k0, 1 To 1)

arr = [b5].Resize(k0, 1)
For i = 1 To k0
    k1 = 0: crr(0) = 0: crr(1) = 0: crr(2) = 0
    For j = i To 1 Step -1
        t1 = Left(arr(j, 1), 1): crr(t1) = crr(t1) + 1: If crr(t1) = 1 Then k1 = k1 + 1
        If k1 = 2 Then brr(i, 1) = j: Exit For
    Next

    k2 = 0: drr(0) = 0: drr(1) = 0: drr(2) = 0
    For j = i To 1 Step -1
        t2 = Right(arr(j, 1), 1): drr(t2) = drr(t2) + 1: If drr(t2) = 1 Then k2 = k2 + 1
        If k2 = 2 Then brr(i, 2) = j: Exit For
    Next
    If brr(i, 1) <> "" Or brr(i, 2) <> "" Then
       brr(i, 3) = 3 - Left(arr(i, 1), 1) - Left(arr(brr(i, 1), 1), 1)
       brr(i, 4) = 3 - Right(arr(i, 1), 1) - Right(arr(brr(i, 2), 1), 1)
    End If
    frr(i, 1) = "'" & brr(i, 3) & brr(i, 4)
Next

[d5].Resize(k0, 1) = frr
End Sub




冷码分析.zip (725.69 KB, 下载次数: 4)

评分

1

查看全部评分

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

本版积分规则

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

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

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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