ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

一组数据处理,处理规则比较多,如何写一个容易扩展的程序?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-3-21 11:29 来自手机 | 显示全部楼层 |阅读模式
本帖最后由 jiangtaowoo 于 2018-3-21 12:02 编辑

待处理的数据有 26 列,24 行,每行数据有对应的几个参照数据 abcd,处理规则一般是判断abcd是否包含在数据中,详见附件。
由于处理规则很多,每一条规则需要输出一组与输入数据对应的判断结果(24行*26列),请问如何写一个容易扩展规程的程序。

数据是这样的(前面四个数据是abcd,后面是正式数据,只列了少量几列)

0        5        6        2                51089        69048        31687        95743        03761        75360
1        3        9        7                51089        69048        23168        29574        30761        97536
2        7        4        9                45108        06948        82316        29574        83076        69753

规则长这样:
规则序号        输出工作簿名称        数据计算规则        举例(以F2单元格数据为例)
1        s1        是否包含本行b列数据        F2内容为 52089 本行B列数据为5,因此判断结果为yes,输出Y
2        s2        是否包含本行c列数据        F2内容为 52089 本行C列数据为6,因此判断结果为no,输出N
3        s3        是否包含本行(B列+C列)的个位数        F2内容为 52089 本行B列+C列结果为11,其个位数为1,因此判断结果为no,输出N
4        s4        单元格的345位内容是否包含本行A列数据        F2内容为 52089,其345位内容为089, 本行A列内容为0,因此判断结果为yes,输出Y

谢谢各位大神指点!
IMG_20180321_120046.jpg
IMG_20180321_120017.jpg
IMG_20180321_115947.jpg

data-check.xlsx.zip

16.65 KB, 下载次数: 4

TA的精华主题

TA的得分主题

发表于 2018-3-22 10:08 | 显示全部楼层
try this:
  1. Sub zz()
  2. Dim ar, br(), s$, a%, b%, c%, s3%, s4$, s5$, s6$, t$
  3. ar = Sheets(1).Range("a2:ae" & Sheets(1).[a1048576].End(3).Row).Value
  4. ReDim br(1 To UBound(ar), 1 To 26)
  5. t = "0123456789"
  6. For i = 1 To UBound(ar)
  7.     a = ar(i, 1): b = ar(i, 2): c = ar(i, 3): s3 = Right(b + c, 1):
  8.     For j = 6 To UBound(ar, 2)
  9.         s = ar(i, j): s4 = Mid(s, 3, 3): s5 = Mid(s, 4, 1) & Mid(s, 1, 1): s6 = t
  10.         For jj = 1 To Len(s)
  11.             s6 = Replace(s6, Mid(s, jj, 1), "")
  12.         Next
  13.         br(i, j - 5) = IIf(InStr(s, b), "Y", "N")                                           's1
  14.         br(i, j - 5) = br(i, j - 5) & "," & IIf(InStr(s, c), "Y", "N")              's2
  15.         br(i, j - 5) = br(i, j - 5) & "," & IIf(Right(s, 1) = s3, "Y", "N")      's3
  16.         br(i, j - 5) = br(i, j - 5) & "," & IIf(InStr(s4, a), "Y", "N")             's4
  17.         br(i, j - 5) = br(i, j - 5) & "," & IIf(InStr(s5, b), "Y", "N")             's5
  18.         br(i, j - 5) = br(i, j - 5) & "," & IIf(InStr(s6, b), "Y", "N")             's5
  19.     Next
  20. Next
  21. Sheets(3).Copy
  22. [b2].Resize(UBound(br), 26) = br
  23. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-3-23 00:39 来自手机 | 显示全部楼层
Chip_Kenny 发表于 2018-3-22 10:08
try this:

谢谢你的回复。
这个代码可以算出结果。结果需要按照规则对应放到不同的输出工作簿中。
是否有可能设计一个类似zz的函数,使得新增规则时,能维持zz的主体逻辑不变(遍历原数据24行*26列,按照要求规则计算结果,输出到指定工作簿),这样扩展规则就会方便许多。
因为实际上类似的规则还有很多,我举例里只列举了一些例子。比如一个新的判断规则可能为A+B之和的个位数是否包含于 数据单元格第2位数据相邻的两个数字之中。
希望扩展规则时,能够保持主体计算逻辑不用动,有没有什么好办法呢。

TA的精华主题

TA的得分主题

发表于 2018-3-24 09:37 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
扩展规则一定要收修代码的,我的代码祇是各种思路中的一种而已,如楼主觉得可行,想改成函数或甚么是,楼主可以自行修改。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-26 09:29 , Processed in 0.044115 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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