从  此线程 拆分。非常感谢!按照你的方法,解决了问题。再次请教!如果删除所有行中同时包含的几个数值,也就是几个数字不确定在哪一列,而都在一个行中。有没有这样的方法删除!真不好意思一直麻烦你。Hi,可以用这个VBAcode来完成您的需求。SubDelete_Rows_Based_On_Multiple_Criteria()DimlRowAsLongDimiCntrAsLongDimIListAsLongDimiColrAsLongDimmetAsLonglRow=200IList=5met=0ForiCntr=lRowTo1Step-1ForiColr=IListTo1Step-1IfCells(iCntr,iColr)=2OrCells(iCntr,iColr)=9OrCells(iCntr,iColr)=18OrCells(iCntr,iColr)=23Thenmet=met+1EndIfIfmet>=4ThenRows(iCntr).DeleteEndIfNextmet=0NextEndSub和上一把我的代码比较一下,我这边多定义了3个参数。IList,iColr以及met。IList用来定义您一共有几列数据,我这边定义的值是5。因为我一共只有5列。iColr和iCntr的作用一样,是用来循环列数的工具。met则是一个计数器,初始值为0大概的工作流程是这样,进行两个循环,第一个For循环没有变动,是对行数进行的,即iCntr从200到1。比如此处的iCntr为第200行。然后进行进行列循环。每当Cells(iCntr,iColr)的值为指定的值时,met计数器加1。然后列循环结束之后,统计met的值,如果met值大于等于4,那么就删除这一行。这里其实有一个bug,如果说您的一行数据为2,2,2,2,2,的话,也会触发这个删除机制。目前我没想到有没有更好的算法来规避这个问题。如果您的数据中,没有这样重复的数据的话,可以尝试用一下这个VBA能不能完成您的需求。(
Hi,可以用这个VBAcode来完成您的需求。SubDelete_Rows_Based_On_Multiple_Criteria()DimlRowAsLongDimiCntrAsLongDimIListAsLongDimiColrAsLongDimmetAsLonglRow=200IList=5met=0ForiCntr=lRowTo1Step-1ForiColr=IListTo1Step-1IfCells(iCntr,iColr)=2OrCells(iCntr,iColr)=9OrCells(iCntr,iColr)=18OrCells(iCntr,iColr)=23Thenmet=met+1EndIfIfmet>=4ThenRows(iCntr).DeleteEndIfNextmet=0NextEndSub和上一把我的代码比较一下,我这边多定义了3个参数。IList,iColr以及met。IList用来定义您一共有几列数据,我这边定义的值是5。因为我一共只有5列。iColr和iCntr的作用一样,是用来循环列数的工具。met则是一个计数器,初始值为0大概的工作流程是这样,进行两个循环,第一个For循环没有变动,是对行数进行的,即iCntr从200到1。比如此处的iCntr为第200行。然后进行进行列循环。每当Cells(iCntr,iColr)的值为指定的值时,met计数器加1。然后列循环结束之后,统计met的值,如果met值大于等于4,那么就删除这一行。这里其实有一个bug,如果说您的一行数据为2,2,2,2,2,的话,也会触发这个删除机制。目前我没想到有没有更好的算法来规避这个问题。如果您的数据中,没有这样重复的数据的话,可以尝试用一下这个VBA能不能完成您的需求。(
Hi,可以用这个VBAcode来完成您的需求。SubDelete_Rows_Based_On_Multiple_Criteria()DimlRowAsLongDimiCntrAsLongDimIListAsLongDimiColrAsLongDimmetAsLonglRow=200IList=5met=0ForiCntr=lRowTo1Step-1ForiColr=IListTo1Step-1IfCells(iCntr,iColr)=2OrCells(iCntr,iColr)=9OrCells(iCntr,iColr)=18OrCells(iCntr,iColr)=23Thenmet=met+1EndIfIfmet>=4ThenRows(iCntr).DeleteEndIfNextmet=0NextEndSub和上一把我的代码比较一下,我这边多定义了3个参数。IList,iColr以及met。IList用来定义您一共有几列数据,我这边定义的值是5。因为我一共只有5列。iColr和iCntr的作用一样,是用来循环列数的工具。met则是一个计数器,初始值为0大概的工作流程是这样,进行两个循环,第一个For循环没有变动,是对行数进行的,即iCntr从200到1。比如此处的iCntr为第200行。然后进行进行列循环。每当Cells(iCntr,iColr)的值为指定的值时,met计数器加1。然后列循环结束之后,统计met的值,如果met值大于等于4,那么就删除这一行。这里其实有一个bug,如果说您的一行数据为2,2,2,2,2,的话,也会触发这个删除机制。目前我没想到有没有更好的算法来规避这个问题。如果您的数据中,没有这样重复的数据的话,可以尝试用一下这个VBA能不能完成您的需求。(
Hi,如果是行数比较多,但是列数少的话,用筛选功能来删除的话比较好,牺牲了一定的效率,换来删除数据的准确性。用VBA代码删除的确比较快,但是可能会存在误删的情况。方便的话,可以给我发一份您的Excel工作簿的样本,我这边可以看一下哪种方法最适合您。同时您现在想要删除的数据是不是还是和之前一样,一行里包含指定几个数值?麻烦再阐述一下您的需求,这样我才能帮您找到最好的方案。Regards,AlexChen*Bewareofscammerspostingfakesupportnumbershere.*Oncecompleteconversationaboutthistopic,kindlyMarkandVoteanyrepliestobenefitothersreadingthisthread.
非常感谢你的支持,你解决了我的很大问题,我因为外债未回,公司经营遇到困难,一旦脱出困境,定当报答,现在急需这个计算方式,还请帮助,容当后报!我要删除的行比较多,上次你给我的非常实用。也非常感激。这次是在保留以前的删除方式中,能否自动删除。我平时是人工输入的,太消耗人工了。是否可以给需要删除的数据,让电脑自动删除。比如在下面的表格中,要删除右边包含左边的数据。在左边的数据中先删除右边的第一行,然后接着第二行,第三行,依序往下删除。这个不知道能否通过宏能够做到,还请赐教!453228986769525770678883554859754356313452687940122546786945543256768998132436578042233554657667144147375487536468795898
Hi,能不能提供一个您的Excel工作簿样本。这样会方便我对您数据结构的理解。我稍后会给你发送一个私信,如果可以提供样本的话,您可以在私信中提供。同时,我不是很确定您这个删除的条件,是说在同一行中,如果右边的单元格里面数据有和左边数据重合的,就清空那个单元格吗?最好能给我提供一个对比,即原始数据与

点赞(49) 打赏

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部