ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

用vba使科目余额表按字符长度分级显示

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-1-10 02:20 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 asdfghjklzz 于 2020-1-10 02:27 编辑

按字符长度分级显示

前四位为一级
56位一级
78位一级
9,10位一级
11,12一级

不要分类汇总,不要函数,我都试过了,想试试vba

让表一变成表二的效果。
最好注释一下部分代码含义,可以让我也学习一下



之前看过的类似帖子,但是达不到我要的效果,我也不会调整代码,只能请大神帮帮忙了!

按序号为分级显示自动创建组  按分级显示的组合自动编序号

http://club.excelhome.net/thread-1098513-1-1.html
这个链接的9楼,楼主写的代码可以研究一下
楼主的附件我也放上来


科目余额表分级.rar

18.49 KB, 下载次数: 28

品种码.rar

54.46 KB, 下载次数: 19

楼主的原件

TA的精华主题

TA的得分主题

发表于 2020-1-10 08:54 | 显示全部楼层
不要这个,不要那个……好强势哦
注释代码,学习……那你不是从基础学起
达不到效果,不会调整代码……那就是伸手党咯

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-1-10 09:37 | 显示全部楼层
本帖最后由 asdfghjklzz 于 2020-1-10 09:43 编辑
microyip 发表于 2020-1-10 08:54
不要这个,不要那个……好强势哦
注释代码,学习……那你不是从基础学起
达不到效果,不会调整代码……那 ...

我才刚开始学习vba,也找了书在看,但是vba不是能一朝一夕学会的,我还在上班,平时也是闲暇的时候才能学习。

这个是为了工作上的方便,我要的比较着急,也不可能放下工作专门学习vba

我也在网上找过了,但是只有这位老师的代码能显示分级,没有专门学过我也不会修改代码,我调试了一天,调到晚上两点,实在是做不到才放到论坛上来,希望有老师能帮我一下

在工作中才能学习到新知识才能进步,我在之前也没有想到会用到分级啊。
让老师注释一下,我理解了以后就是学会了一个新知识啊
论坛不就是为了大家方便学习,使人进步吗?


如果您会这个题目的话,还望不吝指教!

TA的精华主题

TA的得分主题

发表于 2020-1-10 09:47 | 显示全部楼层
“为了大家方便学习,使人进步吗?”是你学习了基础知识,在处理事务时遇到什么问题,协助解决,使你进步。正如你自己说,“我不会调整”,你连基础知识都没有,你能会?别人写了给你,你还是不会啊,但会达到你的目的,“我能用了”

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-1-10 10:01 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
microyip 发表于 2020-1-10 09:47
“为了大家方便学习,使人进步吗?”是你学习了基础知识,在处理事务时遇到什么问题,协助解决,使你进步。 ...

现在是达到了我暂时的目的,但是能说以后不会有人也来找这个问题吗?
我已经提出的问题,就算没有达到别人的要求,起码是一个思路。
就像上一位老师一样,他开启了我的思路,但很可惜我不太会代码。所以只能另开一贴寻求帮助

TA的精华主题

TA的得分主题

发表于 2020-1-10 10:04 | 显示全部楼层
asdfghjklzz 发表于 2020-1-10 10:01
现在是达到了我暂时的目的,但是能说以后不会有人也来找这个问题吗?
我已经提出的问题,就算没有达到别 ...

正如你列举的案例,你应该去学习啊,然后理解啊,再修改为你需要的。

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-1-10 10:23 | 显示全部楼层
microyip 发表于 2020-1-10 10:04
正如你列举的案例,你应该去学习啊,然后理解啊,再修改为你需要的。

也如我之前说的一样,我的工作让我觉得我现在就需要这个代码,我开始查找这个代码,但是没有结果。

我的工作时间又不允许我从基础知识学起,我也说了平时会找代码多看看,但是在如此紧急的时间我不可能放下手上的工作开始从头学习

从开始真正接触表格到现在有两个月的时间,比起在论坛的各位,我知道excel的功能如此强大就在不久之前,接触函数之后才开始了解代码,才开始学习基础知识

我平时还要上班,闲暇之余才有时间学习代码,但是再怎么学习,我都没办法在这么短的时间内,能做到直接修改代码,我现在能理解的代码都只是最最基础的批处理文件夹之类。

所以如果您知道如何修改的话,还望不吝指教!

TA的精华主题

TA的得分主题

发表于 2020-1-10 10:29 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
asdfghjklzz 发表于 2020-1-10 10:23
也如我之前说的一样,我的工作让我觉得我现在就需要这个代码,我开始查找这个代码,但是没有结果。

我 ...

既然只是赶住完成工作,那么还不要这个不要那个干嘛,能完成就好啦。反正不是因为要学习,而是为了完成工作

TA的精华主题

TA的得分主题

发表于 2020-1-10 11:15 | 显示全部楼层
参见
BOM 大纲排序-自定义函数
http://club.excelhome.net/thread-1175717-1-1.html
(出处: ExcelHome技术论坛)

看懂,会修改sub aa 即可
各调用参数见模块代码注释

科目余额表分级.rar

43.39 KB, 下载次数: 37

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-1-10 11:44 | 显示全部楼层
  1. Option Explicit

  2. Sub Test()
  3.     Dim shData As Worksheet, arrGroup As Variant
  4.     Dim lngRow As Long, strTemp As String, lngID As Long
  5.     Dim lngLevMax As Long, lngLevMin As Long
  6.    
  7.     Set shData = Sheets("Sheet1")
  8.     shData.UsedRange.ClearOutline
  9.    
  10.     lngRow = shData.Range("A" & Rows.Count).End(xlUp).Row
  11.     arrGroup = shData.Range("A1:A" & lngRow)
  12.    
  13.     '根据规则,将数据转为层级
  14.         '前四位为一级
  15.         '56 位一级
  16.         '78 位一级
  17.         '9,10位一级
  18.         '11,12一级
  19.     For lngRow = LBound(arrGroup) + 1 To UBound(arrGroup)
  20.         strTemp = Trim(arrGroup(lngRow, 1))
  21.         lngID = (Len(strTemp) - 4) / 2 + 1
  22.         If lngID < 0 Then lngID = 0
  23.         arrGroup(lngRow, 1) = lngID
  24.     Next
  25.     '最大、最小层级
  26.     lngLevMax = Application.WorksheetFunction.Max(arrGroup)
  27.     lngLevMin = Application.WorksheetFunction.Min(arrGroup)

  28.     Application.ScreenUpdating = False
  29.     Application.Cursor = xlWait

  30.     '最小层级不用处理,默认为顶级
  31.     For lngID = lngLevMax To lngLevMin + 1 Step -1
  32.         GroupByLevID shData, arrGroup, lngID
  33.     Next
  34.    
  35.    
  36.     Application.ScreenUpdating = True
  37.     Application.Cursor = xlDefault
  38.    
  39.     MsgBox "OK"
  40. End Sub

  41. Function GroupByLevID(sh As Worksheet, ByRef arrID As Variant, lngLevID As Long)
  42.     Dim lngStartID As Long, lngEndID As Long, lngRow As Long
  43.     '首行为标题
  44.     For lngRow = LBound(arrID) + 1 To UBound(arrID)
  45.         '是否为所查找的层级
  46.         If arrID(lngRow, 1) = lngLevID Then
  47.             '如果找到该层级,判断是否为第一次
  48.             If lngStartID = 0 Then
  49.                 '如果是刚找到,起始、结束赋值
  50.                 lngStartID = lngRow
  51.                 lngEndID = lngRow
  52.                 arrID(lngRow, 1) = lngLevID - 1 '将当前值减1,以便下次查找
  53.             Else
  54.                 '如果是起始值已赋值,更改结束值
  55.                 lngEndID = lngRow
  56.                 arrID(lngRow, 1) = lngLevID - 1 '将当前值减1,以便下次查找
  57.             End If
  58.         Else
  59.             '如果不是当前层级,判断是否有起始值
  60.             If lngStartID > 0 Then
  61.                 sh.Rows(lngStartID & ":" & lngEndID).Group
  62.                 lngStartID = 0: lngEndID = 0
  63.             End If
  64.         End If
  65.         
  66.         '最后一行处理
  67.         If lngRow = UBound(arrID) And lngStartID > 0 Then
  68.             sh.Rows(lngStartID & ":" & lngEndID).Group
  69.             lngStartID = 0: lngEndID = 0
  70.         End If
  71.     Next
  72. End Function
复制代码

评分

2

查看全部评分

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

本版积分规则

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

GMT+8, 2024-11-22 00:33 , Processed in 0.035429 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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