ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 请帮修改下VBA代码

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-4-19 16:22 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
请论坛老师帮看下,之前在论坛有老师给了段删除多余信息代码,但后面运行时,发现最后有一行删除不了,另外帮批注下代码翻译是什么意思。

删除表格论坛.zip

12.19 KB, 下载次数: 9

TA的精华主题

TA的得分主题

发表于 2023-4-19 16:32 | 显示全部楼层
请问,这个n在整个代码中起到什么作用?

TA的精华主题

TA的得分主题

发表于 2023-4-19 16:37 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
当时,有几个人帮你写了代码,为啥只用其中一个人的代码呢?你也可以试试其他人的代码。
代码行数越少越不容易理解。批注代码,大多数人不会做。

TA的精华主题

TA的得分主题

发表于 2023-4-19 16:40 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
改成这样更好吧
Sub A删除人员信息()
    Dim r&, i&
    Dim Rng As Range
   
    r = ActiveSheet.UsedRange.Rows.Count
    Set Rng = Rows(r + 1)
    For i = r To 1 Step -1
        If Cells(i, 5).MergeCells Then
            Set Rng = Union(Rng, Rows(i))
        End If
    Next i
    Rng.Delete
End Sub

TA的精华主题

TA的得分主题

发表于 2023-4-19 16:40 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-4-19 16:44 | 显示全部楼层
代码注释如下
  1. Sub A删除人员信息()
  2.     Dim r&, i&
  3.     Dim Rng As Range
  4.    
  5.     r = ActiveSheet.UsedRange.Rows.Count        '获取当前表格已使用单元格的总行数
  6.     Set Rng = Rows(r + 1)       'Rng初始赋值
  7.     For i = r To 1 Step -1      '倒序循环
  8.         If Cells(i, 5).MergeCells Then
  9.             Set Rng = Union(Rng, Rows(i))       '如果单元格为合并单元格,则整行加入Rng变量中
  10.         End If
  11.     Next i
  12.     Rng.Delete      '包含合并单元格的行全部删除
  13. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2023-4-19 17:11 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-4-19 17:17 | 显示全部楼层
r = ActiveSheet.UsedRange. Rows. Count
1. 获取该工作表中已使用的行数r。( 当前表格是3-117,共计112个数量,所以你是从115这个数量开始处理数据,而你的最后一行是117行,不在处理的范围里)
Set Rng=Rows(r+1),
2. 定义一个范围变量Rng,用于记录需要删除的行。
For i=r To 1 Step -1
3. 从r行(这个数字是115行)开始循环,对于每一行进行以下操作:
If Cells(i, 5).MergeCells Then            n=n+1
- 判断该行第5列是否合并单元格,如果是则将该行加入Rng范围,并将n加1。
Elseif  n> 1 Then     n=0
- 如果该行不是合并单元格,但n>1,则说明前面存在合并单元格、空白行,到此行结束,因此重置n,用于下次出现合并单元格的时候计数
Elseif  n= 1 Then    Set Rng = Union(Rng, Rows(i))
- 如果该行不是合并单元格,且n=1,则该行是合并单元格的上面的一个空白行,将此行假如RNG范围。
Rng.Delete
4. 循环结束后,将Rng范围中的所有行删除。(有合并单元格的行以及空白行)

这个代码不改也可以,你把表格开始的空白行 (也就是1:3行删除掉)删除掉就行了




评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-4-19 17:25 | 显示全部楼层

N的作用是把两个单位之间的上下两个合并单元格之间的空白行也删除掉了

当有合并单元格计数1,这样经过3个空白的行,到了第二个合并单元格之间,都是无合 N = 1 的状态
会把行加入到rng中

经过第二个合并单元格N从1变成2   还有从2变成3  这样当到了每个单位的最后一行,N被重置成0,不进行操作
一直到再次遇到合并单元格  重复上面的操作。。。

因为每个公司的合并单元格  以及空白行这些格式是固定的,是一个巧妙的构思,不是吗……

TA的精华主题

TA的得分主题

发表于 2023-4-19 17:26 | 显示全部楼层
Sub A删除人员信息1()
    r = ActiveSheet.UsedRange.Rows.Count + 100
    For i = r To 1 Step -1
        If Cells(i, 1).MergeCells Or Len(Cells(i, 1).Value) = 0 Then
            Rows(i).Delete
        End If
    Next
End Sub


给你前100行是空白的机会
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-16 02:59 , Processed in 0.045615 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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