Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 11190|回复: 14

[已解决]怎样删除满足条件的部分单元格,删除后时单元格左移,而不是整行删除???

[复制链接]
发表于 2011-8-12 21:29 | 显示全部楼层 |阅读模式
如附件,如玻璃长为空,则下列四个单元格删除,删除后时单元格左移?
!!
玻璃长
玻璃宽
玻璃数量
玻璃纹理

用VBA怎么写?
SUB 删除空格()
  row3 = Range("a65536").End(xlUp).Row
  For row3 To 2 step -1
       If Range("j" & N) = "" Then
          range("j"&n:"m"&n).delete
end sub
1、不能这样直接将DELETE写在RANGE后面,range无此方法,怎样删除?
2、怎样选定单元格的位置?
最佳答案
2011-8-12 22:04
cxh5237@163.com 发表于 2011-8-12 22:00
为什么我这样写,都达不到效果呢??闹心
With Sheets("汇总表")
      row3 = Range("a65536").End(x ...
  1. Sub 删除空格()
  2. Dim i As Integer
  3. Dim RoW3 As Integer
  4. RoW3 = Range("a65536").End(xlUp).Row
  5. For i = RoW3 To 2 Step -1
  6.     If Cells(i, 4).Value = "" Then
  7.         Range("D" & i).Resize(1, 4).Delete Shift:=xlToLeft
  8.     End If
  9. Next
  10. End Sub
复制代码

这些给你的不能实现你的效果么?

books.rar

7.11 KB, 下载次数: 28

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2011-8-12 21:38 | 显示全部楼层
你复制出来的代码有很多错误:
1、FOR里面没有变量的初始值
2、range("j"&n:"m"&n).delete里的冒号应该在第二个引号内容里,还少了一个连接符号&。

修改下为:
  1. Range("j" & n & ":m" & n).Delete Shift:=xlToLeft
复制代码
回复

使用道具 举报

发表于 2011-8-12 21:42 | 显示全部楼层
回复 cxh5237@163.com 的帖子

Sub test()
    Application.ScreenUpdating = False
    For r = 2 To Range("a65536").End(xlUp).Row
        If Cells(r, 4) = "" Then Cells(r, 4).Resize(1, 4).Delete xlShiftToLeft
    Next
    Application.ScreenUpdating = True
End Sub

回复

使用道具 举报

 楼主| 发表于 2011-8-12 21:47 | 显示全部楼层
回复 放浪形骸 的帖子

谢谢!我明白我的错误,但还是不能达到我想要的效果。
回复

使用道具 举报

发表于 2011-8-12 21:50 | 显示全部楼层
  1. Sub 删除空格()
  2.   Dim row3 As Long
  3.   Dim i As Long
  4.   row3 = Range("A65536").End(xlUp).Row
  5.   For i = row3 To 2 Step -1
  6.       If Range("D" & i) = "" Then
  7.         Range("D" & i).Resize(1, 4).Delete Shift:=xlToLeft
  8.       End If
  9.   Next
  10. End Sub
复制代码

books.rar (9.79 KB, 下载次数: 23)
回复

使用道具 举报

 楼主| 发表于 2011-8-12 22:00 | 显示全部楼层
为什么我这样写,都达不到效果呢??闹心
With Sheets("汇总表")
      row3 = Range("a65536").End(xlUp).Row
    For N = row3 To 2 Step -1
          If Range("v" & N) = "" Then
              Range("v" & N & ":y" & N).delete shift:=xlToLeft
          ElseIf Range("r" & N) = "" Then
             Range("r" & N & ":u" & N).delete shift:=xlToLeft
         ElseIf Range("n" & N) = "" Then
             Range("n" & N & ":q" & N).delete shift:=xlToLeft
           ElseIf Range("j" & N) = "" Then
             Range("j" & N & ":m" & N).delete shift:=xlToLeft
          End If
    Next N
  
       End With
         
回复

使用道具 举报

发表于 2011-8-12 22:04 | 显示全部楼层    本楼为最佳答案   
cxh5237@163.com 发表于 2011-8-12 22:00
为什么我这样写,都达不到效果呢??闹心
With Sheets("汇总表")
      row3 = Range("a65536").End(x ...
  1. Sub 删除空格()
  2. Dim i As Integer
  3. Dim RoW3 As Integer
  4. RoW3 = Range("a65536").End(xlUp).Row
  5. For i = RoW3 To 2 Step -1
  6.     If Cells(i, 4).Value = "" Then
  7.         Range("D" & i).Resize(1, 4).Delete Shift:=xlToLeft
  8.     End If
  9. Next
  10. End Sub
复制代码

这些给你的不能实现你的效果么?
回复

使用道具 举报

 楼主| 发表于 2011-8-12 22:04 | 显示全部楼层
回复 wbzxz 的帖子

没有循环,只将D EFG四行删除,后面没有继续判断删除!!
回复

使用道具 举报

发表于 2011-8-12 22:07 | 显示全部楼层
cxh5237@163.com 发表于 2011-8-12 22:00
为什么我这样写,都达不到效果呢??闹心
With Sheets("汇总表")
      row3 = Range("a65536").End(x ...

你还是希望说如果玻璃长下面没有数据,那把从这格开始的连续的空行都删除么?
回复

使用道具 举报

 楼主| 发表于 2011-8-12 22:09 | 显示全部楼层
回复 放浪形骸 的帖子

是!!!

回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-12 07:03 , Processed in 0.314490 second(s), 7 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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