vba层级结构实现求助
请教各位小伙伴Excel中实现层级编号的一个具体表格问题:在如图表格中,有一列数据以缩进的形式(三个空格为一个单位)来区分层级结构;如果是0缩进则为第一层级,记作1;以此类推3个层级则为1-1-1;实现层级结构的同时需要排序,如果前面出现了1-1-1而再次出现3级缩进则为1-1-2........
具体表格形式如下图:
https://attach.52pojie.cn//forum/202203/24/014314xryoq4ifdbkk4do4.png?l
图中第二列B列以空格缩进,第一列为所示层级结构;
我经过尝试vba编程,因为微软的indentlevel方法不是空格,所以尝试一失败;
后经过百度在CS某N找到:https://blog.csdn.net/STR_Liang/article/details/106888042
https://attach.52pojie.cn//forum/202203/24/014652ry66941930m4m6x6.jpg?l
使用如下方法可以获得空格个数 除以3则为缩进层级=LEN(A2)-LEN(SUBSTITUTE(A2,B2,"")
问题一:层级1和层级2,3,4,5需要判断,以循环次数来判断肯定不行,如何实现对应层级执行关系?
问题二:层级内部还有顺序判断是否为1-1,1-2,1-3,执行完毕进入下一层级,这个过程如何优化?
想请教一下各位小伙伴有没有好的实现方式?因为网上的vba实际案例很少 还想请问一下各位有没有好的vba书籍推荐或者是vba论坛抑或是视频都可,感觉excel这东西跟大数据太像了。。。。数据处理好头痛。。。 https://club.excelhome.net/forum.php?mod=viewthread&tid=1620573&fromguid=hot&extra=&mobile=&_dsign=76ab3a70
这个也是层级的 简单的话,可以根据(缩进的数量/3),写几个局部变量,判断是哪一个层级 是根据A列生成B列,还是根据B列生成A列? 利用B列前导空格来分析阶层有点冒险,直接利用A列来分析阶层。
可以定义一个类(假设类名:RowData)来描述每行数据,额外增加2个属性来描述阶层。
colA
colB
...
parent
children
然后做一个Dictionary准备存放每条数据。
然后读每条数据,拆分colA最后一个"-"(如果存在的话),这样能得到parentKey和当前Key:colA
先尝试从Dictionary获取parentKey和colA得到上级pData和当前cData,谁不存在就创建RowData对象存放到Dictionary
这样pData和cData都会存在了,但是cData可能只有key,把excel中其他属性存入cData,同时建立pData和cData之间的层级关系。
读完所有数据,数据之间的层级关系也就有了,剩下的就按照你想要的逻辑进行处理。
去excelhome,把你的原表附上,然后写清楚你要实现的目标,会有大佬把代码写给你的 如果换成关系数据库SQL(mysql, sql server),思路会不会一下就打开了,借助于数据库构造好需要的数据模型,再输出到EXCEL 判断级别,比前一个级别大,则前一个级别字串加"-1",否则取前一个级别的对应级别,并在最后加1
如前一个级别代号是"1-2-3-4",当前级别是5,比前一个级别大,则代号变为"1-2-3-4-1"
若当前级别为3,则代号变为"1-2-4" miocaro507 发表于 2022-3-24 08:21
是根据A列生成B列,还是根据B列生成A列?
B生成A的层级编号 EnterpriseSolu 发表于 2022-3-24 09:08
如果换成关系数据库SQL(mysql, sql server),思路会不会一下就打开了,借助于数据库构造好需要的数据模型 ...
我能大概知道啥意思 但是原始数据在excel 且仅有空格为层级分级依据,导入的时候就能构建吗?